Tag: ruby hash

如果值递归地包含字符串,则Ruby返回顶级散列键

我有下面的数据结构,我试图返回顶级键(lo,eth0或eth1),如果在任何地方递归和任意深度,它的值是给定的字符串。 然后在找到第一个字符串实例后终止搜索。 在包含任意数量的嵌套哈希和数组的哈希深处查找键/值对这类似于我想要做的但我无法将其映射到我自己的问题 h.find{ |k,v| break k if v.include? “number” } => “eth0” h.find{ |k,v| break k if v.include? “10.0.128.26” } => nil #Should return eth0 我想知道如何通常使用这样的嵌套数据结构,但我决定能够在特定的子哈希,我的情况下的地址中专门搜索。 h = \ {“lo”=> {“mtu”=>”65536”, “flags”=>[“LOOPBACK”, “UP”, “LOWER_UP”], “encapsulation”=>”Loopback”, “addresses”=> {“127.0.0.1″=> {“family”=>”inet”, “prefixlen”=>”8”, “netmask”=>”255.0.0.0”, “scope”=>”Node”}}, “state”=>”unknown”}, “eth0″=> {“type”=>”eth”, “number”=>”0”, “mtu”=>”1500”, “flags”=>[“BROADCAST”, “MULTICAST”, “UP”, “LOWER_UP”], “encapsulation”=>”Ethernet”, “addresses”=> {“00:0C:29:1A:64:6A”=>{“family”=>”lladdr”}, “10.0.128.26”=> […]

这个属性如何在ruby类中保存多个属性?

在这里,你看到我们有一个名为“属性”的属性,我们在我们的类中初始化它,所以问题是名称和衬衫属性来自哪里,因为我们不在我们的类中初始化和定义它们? class Shirt attr_accessor :attribute def initialize(attributes) @attributes = attributes end end store = Shirt.new(name: “go”, size: “42”) 当我检查这个衬衫类的实例时,我得到一个哈希: @attributes={:name=>”go”, :size=>”42″} 有人可以帮忙解释一下吗?

有没有解决方案绕过’迭代过程中无法将新密钥添加到哈希(RuntimeError)’?

我对预期的RuntimeError有一个很大的问题:“在迭代期间无法在哈希中添加新密钥” 在我的情况下,我有一个YAML文件:test.yaml – 我已经添加了一些键。 test.yaml key1: key2: key3: 我在变量中获取文件的内容: file_hash = YAML.load_file(“testm.yaml”) 然后我需要遍历此哈希并向其添加其他键: file_hash.each do |key| file_hash[key] = ‘key_1’ file_hash[key] = ‘key_2’ end File.open(‘test.yaml’, ‘w’) { |f| YAML.dump(file_hash, f) } 主要问题是我在循环中无法写入哈希。 当你有权控制循环块时,我不明白为什么会这样。 还有另一种方法可以完成我上面展示的内容吗? 注意:我使用的是RUBY 1.9.3 p547