如何获取在Ruby中迭代哈希的特定输出?

sts*_*sts 210 ruby hash output

我希望得到一个迭代Ruby Hash的特定输出.

这是我想迭代的哈希:

hash = {
  1 => ['a', 'b'], 
  2 => ['c'], 
  3 => ['d', 'e', 'f', 'g'], 
  4 => ['h']
}
Run Code Online (Sandbox Code Playgroud)

这是我想得到的输出:

1-----

a

b

2-----

c

3-----

d 

e

f

g

4-----

h
Run Code Online (Sandbox Code Playgroud)

在Ruby中,如何使用Hash获得这样的输出?

sep*_*p2k 313

hash.each do |key, array|
  puts "#{key}-----"
  puts array
end
Run Code Online (Sandbox Code Playgroud)

关于我应该添加的顺序,在1.8中,项目将以随机顺序迭代(好吧,实际上是按照Fixnum的散列函数定义的顺序),而在1.9中,它将按照文字的顺序迭代.

  • 如果密钥不在任何地方使用怎么办?. 我们需要用 `?` 代替 key 吗?例如:`|?, array|` 这是有效的语法吗? (2认同)
  • @huzefabiyawarwala是的,你可以写`| _,v |` (2认同)

tom*_*rad 81

迭代哈希的最基本方法如下:

hash.each do |key, value|
  puts key
  puts value
end
Run Code Online (Sandbox Code Playgroud)


eri*_*rik 48

hash.keys.sort.each do |key|
  puts "#{key}-----"
  hash[key].each { |val| puts val }
end
Run Code Online (Sandbox Code Playgroud)


gle*_*ald 18

在散列上调用sort会将其转换为嵌套数组,然后按键对它们进行排序,因此您只需要:

puts h.sort.map {|k,v| ["#{k}----"] + v}
Run Code Online (Sandbox Code Playgroud)

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

puts h.sort
Run Code Online (Sandbox Code Playgroud)


Eli*_*dou 9

我的一线解决方案:

hash.each { |key, array| puts "#{key}-----", array }

我觉得这很容易阅读.