所以我有一个这样的哈希:
hash = { "a"=>[1, 2, 3], "b"=>[18, 21, 9] }
我想获得整个数组,而不仅仅是值。
看起来这应该有效:
hash.each{|key,value| value}
[1, 2, 3]
[18, 21, 9]
但我得到的是数组 1、2、3 的各个元素。我知道我可以做 hash.values,但这给出了一个没有键的数组数组。我需要键/值(数组)对。想法?
您所描述的确实按预期工作:
=> {"a"=>[1, 2, 3], "b"=>[18, 21, 9]}
[4] pry(main)> hash.each { |k,v| puts v.length }
3
3
您可以发布一段代码来说明您的具体问题吗?
您的构造确实为您提供了整个数组:
irb(main):001:0> hash = { "a" => [1, 2, 3], "b" => [18, 21, 9] }
=> {"a"=>[1, 2, 3], "b"=>[18, 21, 9]}
irb(main):002:0> hash.each{ |key,value| puts value.class.name }
Array
Array
也许你只是想puts
一个数组?如果是这样,默认情况下将每个元素放在单独的行上。
irb(main):003:0> puts [1,2,3]
1
2
3
如果你有这个
hash = { "a"=>[1, 2, 3], "b"=>[18, 21, 9] }
并且您希望仅使用密钥访问器返回整个数组。例如
hash[:a] = [1, 2, 3]
hash[:b] = [18, 21, 9]
不确定我是否完全理解,但您是否要求这样的东西(使用.to_a
):
hash = { "a"=>[1, 2, 3], "b"=>[18, 21, 9] }
=> {"a"=>[1, 2, 3], "b"=>[18, 21, 9]}
arr = hash.to_a
=> [["a", [1, 2, 3]], ["b", [18, 21, 9]]]
尝试这个:
hash.map { |k,v| { k => v} }
它返回:
{"a"=>[1, 2, 3]}
{"b"=>[18, 21, 9]}
这是你想要的吗?
hash.map{|key,value| [key]+value }
=> [["a", 1, 2, 3], ["b", 18, 21, 9]]