1

我有这样的事情:

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当前oniontrue. 我怎样才能做到这一点?

4

4 回答 4

5

这是不可能的。一个对象不知道引用它的变量。

于 2013-06-17T14:05:20.753 回答
1

类似的效果可以通过将数组替换为 hash 并制作:hash1,:hash2:hash3键来实现。

假设我们有hash变量:

hash.keys.select{|key| hash[key]['onion']}
于 2013-06-17T14:13:28.230 回答
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 )
于 2013-06-17T17:55:59.370 回答
-1

好的,正如您在@Jörg W Mittag发表的帖子的评论部分中所问的那样-有没有办法从洋葱为真的数组中的哈希中返回某个键(虽然不是洋葱的键)?. 是的,如下所示:

在这里,我考虑了一个输入数组,其中存在多个,它们对 key onionHash具有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"
于 2013-06-17T14:03:21.270 回答