Ruby Hash到值数组

tbr*_*oke 110 ruby arrays hash

我有这个:

hash  = { "a"=>["a", "b", "c"], "b"=>["b", "c"] } 
Run Code Online (Sandbox Code Playgroud)

我想谈谈这个: [["a","b","c"],["b","c"]]

这似乎应该可以工作,但它不会:

hash.each{|key,value| value}
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]} 
Run Code Online (Sandbox Code Playgroud)

有什么建议?

Ray*_*oal 246

还有点简单....

>> hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]}
>> hash.values
=> [["a", "b", "c"], ["b", "c"]]
Run Code Online (Sandbox Code Playgroud)

Ruby doc在这里

  • +!漂亮!尽管有一个相互竞争的答案(使用`map`),我仍然会投票,但我很喜欢这个! (3认同)
  • `Hash#values`不仅更简单,而且效率更高.比较`time ruby​​ -e'(1..1000000).reduce({}){| h,i | h.store我,我; h} .values'`with`time ruby​​ -e'(1..1000000).reduce({}){| h,i | h.store我,我; H} .MAP {| K,V | V}'` (2认同)
  • 按键是按照它们出现的确切顺序打印的吗? (2认同)

Mic*_*ant 41

我会用:

hash.map { |key, value| value }
Run Code Online (Sandbox Code Playgroud)

  • 我没有对它进行投票,但它更像"哈希#值". (3认同)
  • 我想我们不是在这里竞争,而是互相帮助,对吗?:) (3认同)
  • 对数字投票感到惊讶!这可行。我尝试过这个! (2认同)

jer*_*son 21

hash.collect { |k, v| v }
#returns [["a", "b", "c"], ["b", "c"]] 
Run Code Online (Sandbox Code Playgroud)

Enumerable#collect接受一个块,并在枚举的每个元素上返回一次运行块的结果数组.所以这段代码只是忽略了键并返回了所有值的数组.

Enumerable模块非常棒.了解它可以为您节省大量时间和大量代码.

  • 别忘了,就像@Ray Toal的回答一样,`hash.values`最终是正确答案. (2认同)

小智 12

这很简单

hash.values
#=> [["a", "b", "c"], ["b", "c"]]
Run Code Online (Sandbox Code Playgroud)

这将返回一个新数组,其中填充了哈希值

如果你想存储这个新数组

array_of_values = hash.values
#=> [["a", "b", "c"], ["b", "c"]]

array_of_values
 #=> [["a", "b", "c"], ["b", "c"]]
Run Code Online (Sandbox Code Playgroud)


mrd*_*ded 7

hash  = { :a => ["a", "b", "c"], :b => ["b", "c"] }
hash.values #=> [["a","b","c"],["b","c"]]
Run Code Online (Sandbox Code Playgroud)