0

所以我有一个这样的哈希:

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,但这给出了一个没有键的数组数组。我需要键/值(数组)对。想法?

4

6 回答 6

1

您所描述的确实按预期工作:

=> {"a"=>[1, 2, 3], "b"=>[18, 21, 9]}
[4] pry(main)> hash.each { |k,v| puts v.length }
3
3

您可以发布一段代码来说明您的具体问题吗?

于 2013-03-07T01:45:46.270 回答
0

您的构造确实为您提供了整个数组:

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
于 2013-03-07T01:45:54.843 回答
0

如果你有这个

hash = { "a"=>[1, 2, 3], "b"=>[18, 21, 9] }

并且您希望仅使用密钥访问器返回整个数组。例如

hash[:a] = [1, 2, 3]
hash[:b] = [18, 21, 9]
于 2014-02-05T15:56:53.387 回答
0

不确定我是否完全理解,但您是否要求这样的东西(使用.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]]]
于 2013-03-07T01:48:22.413 回答
0

尝试这个:

hash.map { |k,v| { k => v} }

它返回:

{"a"=>[1, 2, 3]}
{"b"=>[18, 21, 9]}
于 2013-03-07T01:53:01.630 回答
0

这是你想要的吗?

hash.map{|key,value| [key]+value }
=> [["a", 1, 2, 3], ["b", 18, 21, 9]]
于 2013-03-07T01:54:10.047 回答