我有这样的事情:
array = [
hash1 = {"marco"=>"polo", "girth"=>"skinny", "onion"=>true},
hash2 = {"darco"=>"johnson", "girth"=>"wide", "onion"=>false},
hash3 = {"flarco"=>"kiwi", "birth"=>"noble", "onion"=>false}
]
在任何给定时间,只有一个onion
为true
。
我希望表达式或函数返回变量的名称(即hash1
,hash2
),其中包含onion
当前为true
的哈希值。我怎么能这样做?
答案 0 :(得分:5)
这是不可能的。对象不知道引用它的变量。
答案 1 :(得分:1)
使用哈希替换数组并生成:hash1
,:hash2
和:hash3
键可以实现类似的效果。
假设我们有hash
变量:
hash.keys.select{|key| hash[key]['onion']}
答案 2 :(得分:0)
但如果您通过允许冒号:
而不是=
符号来放宽要求:
array = [
hash1: {"marco"=>"polo", "girth"=>"skinny", "onion"=>true},
hash2: {"darco"=>"johnson", "girth"=>"wide", "onion"=>false},
hash3: {"flarco"=>"kiwi", "birth"=>"noble", "onion"=>false}
]
我们可以解决这个问题:
-> *_, **p { p.find { |_, v| v["onion"] }.first }.( *array )
答案 3 :(得分:-1)
好的,正如你在 @JörgWMittag 所做的帖子的评论部分中提到的那样 - 有没有办法从洋葱为真的数组中的哈希返回某个键(虽然不是洋葱的关键?。是的,有可能如下所示:
在这里,我考虑了一个输入数组,其中存在多个Hash
,其中洋葱键的值为true
。现在要处理这种情况{}需要enum#find_all
。
array = [
{"marco"=>"polo", "girth"=>"skinny", "onion"=>true},
{"darco"=>"johnson", "girth"=>"wide", "onion"=>true},
{"flarco"=>"kiwi", "birth"=>"noble", "onion"=>false}
]
array.find_all{|i| i["onion"]== true}.map{|i| i.keys[0]}
#>>["marco", "darco"]
根据 OP 的输入数组,enum#find
可以正常工作。
array = [
{"marco"=>"polo", "girth"=>"skinny", "onion"=>true},
{"darco"=>"johnson", "girth"=>"wide", "onion"=>false},
{"flarco"=>"kiwi", "birth"=>"noble", "onion"=>false}
]
array.find{|i| i["onion"] }.keys[0]
# => "marco"