草庐IT

ruby - 创建一个绑定(bind),其唯一变量是哈希中的键

我知道我可以使用ostruct从哈希创建绑定(bind),如下所示:require'ostruct'not_in_locals="wedon'twantthis"locals={a:1,b:2}my_binding=OpenStruct.new(locals).instance_eval{binding}pmy_bindingpeval("a",my_binding)#good,wewantthispeval("b",my_binding)#good,wewantthispeval("not_in_locals",my_binding)#bad,don'twantittoaccesst

ruby 散列作为散列的键

在ruby​​1.8.6中遇到了以下奇怪的行为,在1.8.7中它似乎工作正常。有谁知道是什么原因造成的?h={}key_1={1=>2}key_2={1=>2}h[key_1]=3pkey_1==key_2#=>trueph.has_key?(key_2)#=>expecttrue,getfalse,wtf?本来以为是Hash类上实现了hash方法导致的。p[key_1.hash,key_2.hash]#=>[537787070,537787060](different)但是即使我重写了Hash的hash方法classHashdefhashreturnself.keys.hash+se

ruby-on-rails - 用于捕获冒号分隔的键值对的正则表达式,具有多行值

我目前正在使用RubyonRails(在Eclipse中)开发一个项目,我的任务是使用正则表达式将数据block拆分为相关部分。我决定根据3个参数分解数据:该行必须以大写字母开头(等同于RegEx-/^[A-Z]/)它必须以:(RegEx等效-/$":"/)结尾如果有任何帮助,我将不胜感激....我在我的Controller中使用的代码是:@f=File.open("report.rtf")@fread=@f.read@chunk=@fread.split(/\n/)其中@chunk是将由拆分创建的数组,@fread是要拆分的数据(按新行)。任何帮助将不胜感激,非常感谢!我不能发布确切

ruby - 保留从 Ruby 中的文件加载 YAML 的键顺序

我想保留从磁盘加载、以某种方式处理并写回磁盘的YAML文件中键的顺序。这是在Ruby(v1.8.7)中加载YAML的基本示例:require'yaml'configuration=nilFile.open('configuration.yaml','r')do|file|configuration=YAML::load(file)#atthispointconfigurationisahashwithkeysinanundefinedorderend#processconfigurationinsomewayFile.open('output.yaml','w+')do|file|YA

ruby-on-rails - 没有路由匹配 - 缺少必需的键[:id]

背景我正在我的应用程序中实现一项功能,允许用户对图片进行评分和评论。我的问题源于将Reviews资源嵌套在Pictures资源中,特别是在我的Review#Edit函数中。错误消息特别声明缺少必需的键:[:id]错误信息ActionController::URLGenerationErrorinReviews#EditNoroutematches{:action=>"show",:controller=>"reviews",:format=>nil,:picture_id=>#,:id=>nil}missingrequiredkeys:[:id]Undefinedmethod'revi

ruby - 有没有一种优雅的方法可以从散列中删除特定的键,它是 Ruby 中的子散列

假设我有一个可能包含哈希的哈希。params:{:action=>"index",:controller=>"home",:secret=>"IloveJeffAtwood",:user=>{name=>"Steve",secret=>"IstealJoel'spants"}}有没有一种优雅的方法来遍历散列并删除我遇到的所有“secret”键,包括子散列。(哈希值不受限制,因此无法提前知道哈希值可能包含什么。)我知道我能做到params.delete(:secret)但这不会从“用户”哈希中获取secret。 最佳答案 我不认为有一

arrays - 如何找到其值具有最多元素的散列的键

我正在使用Ruby2.4。我有一个散列,它的键是一个数字,它的值是一个元素数组。如何在散列中找到具有最多元素的值的键?我知道如果我的值是一个数字,我可以这样做:my_hash.max_by{|k,v|v}但由于该值是一个数组,我不确定如何告诉上面的使用数组中的元素数作为应该最大化的元素数。 最佳答案 max_by是正确的方法:my_hash={a:[1,2],b:[1,2,3],c:[5]}key,longest_array=my_hash.max_by{|k,array|array.size}pkey#=>:bplongest_a

ruby - 如果存在,如何重命名散列中的键

我有以下哈希:a={foo:'bar',answer:'42'}如何优雅地将键:foo重命名为新键:test?如果:foo的散列条目不存在,则不应更改散列。 最佳答案 a[:test]=a.delete(:foo)ifa.key?(:foo) 关于ruby-如果存在,如何重命名散列中的键,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/25283240/

ruby - 如何将 ruby​​ hash 转为 value 成为指向一组旧键的键?

我有这样的哈希:t={"4nM"=>"Triangle","I40"=>"Triangle","123"=>"Square"}我想把它变成像这样的散列:{"Triangle"=>["4nM","I40"],"Square"=>["123"]}执行此操作的最佳方法是什么?我从group_by开始,但是代码变得有点复杂....这是我做的:t.group_by{|k,v|v}.map{|type,group|{type=>group.flatten.reject{|x|x==type}}} 最佳答案 h={"4nM"=>"Triangle

ruby-on-rails - 如何使用正则表达式删除 memcached 中的键(使用 Dalli+RoR)。

如何使用正则表达式删除memcached中的键(使用Dalli+Rails)defexpire_allexpire_fragment(Regexp.new("/customers/customers"))expire_fragment(Regexp.new("/customers/customers\/"))expire_fragment(Regexp.new("/agreements/agreements"))expire_fragment(Regexp.new("/agreements/agreements\/"))end不适用于memcached。有什么想法吗?