我想得到一个特定的输出迭代Ruby哈希。

这是我想迭代的哈希值:

hash = {
  1 => ['a', 'b'], 
  2 => ['c'], 
  3 => ['d', 'e', 'f', 'g'], 
  4 => ['h']
}

这是我想要得到的输出:

1-----

a

b

2-----

c

3-----

d 

e

f

g

4-----

h

在Ruby中,我如何能得到这样的输出与我的哈希?


当前回答

在哈希中调用sort将其转换为嵌套数组,然后按键对它们进行排序,所以你所需要的是:

puts h.sort.map {|k,v| ["#{k}----"] + v}

如果你实际上不需要“----”部分,它可以是:

puts h.sort

其他回答

遍历哈希最基本的方法如下:

hash.each do |key, value|
  puts key
  puts value
end

在哈希中调用sort将其转换为嵌套数组,然后按键对它们进行排序,所以你所需要的是:

puts h.sort.map {|k,v| ["#{k}----"] + v}

如果你实际上不需要“----”部分,它可以是:

puts h.sort

我的一句话解决方案:

散列。每个{|键,数组|放置“#{key}-----”,数组}

我认为它很容易读。

hash.keys.sort.each do |key|
  puts "#{key}-----"
  hash[key].each { |val| puts val }
end
hash.each do |key, array|
  puts "#{key}-----"
  puts array
end

关于顺序,我应该补充的是,在1.8中,条目将以随机顺序迭代(好吧,实际上是由Fixnum的哈希函数定义的顺序),而在1.9中,它将以文字的顺序迭代。