从散列中的每个键返回前x个值

dax*_*dax 1 ruby hash

在下面的哈希中,我想从每个键返回第一个'x'值:

my_hash = {
  :key_one =>["one", "two", "three", "four", "five"], 
  :key_two =>["one", "two", "three", "four", "five"]
} 
Run Code Online (Sandbox Code Playgroud)

在不改变散列结构的情况下,即密钥保持不变.'x'为2时的预期输出:

my_hash = {
  :key_one => ["one", "two"], 
  :key_two => ["one", "two"]
} 
Run Code Online (Sandbox Code Playgroud)

问题是如何"很好地"做到这一点 - 我可以制作一个新的哈希,但这很麻烦,很难看,即使密钥的数量没有增长,它们也可能.

{
  :key_one => my_hash[:key_one].first(2),
  :key_two => my_hash[:key_two].first(2)
}
Run Code Online (Sandbox Code Playgroud)

Nei*_*ter 8

my_hash = {
  :key_one =>["one", "two", "three", "four", "five"], 
  :key_two =>["one", "two", "three", "four", "five"]
}

Hash[ my_hash.map { |k,v| [ k, v.first(2) ] } ]

# => {:key_one=>["one", "two"], :key_two=>["one", "two"]}
Run Code Online (Sandbox Code Playgroud)

参考文献: