在下面的哈希中,我想从每个键返回第一个'x'值:
my_hash = {
:key_one =>["one", "two", "three", "four", "five"],
:key_two =>["one", "two", "three", "four", "five"]
}
不改变散列的结构,即键保持不变。 'x'为2时的预期输出:
my_hash = {
:key_one => ["one", "two"],
:key_two => ["one", "two"]
}
问题是如何“很好”地做到这一点 - 我可以创建一个新的哈希,但这很麻烦,很难看,即使密钥的数量没有增长,他们可能会这样做。
{
:key_one => my_hash[:key_one].first(2),
:key_two => my_hash[:key_two].first(2)
}
答案 0 :(得分: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"]}
参考文献:
答案 1 :(得分:4)
使用Array#take
的另一种方式:
my_hash = {
:key_one =>["one", "two", "three", "four", "five"],
:key_two =>["one", "two", "three", "four", "five"]
}
my_hash.map { |k,v| [ k, v.take(2) ] }.to_h
# => {:key_one=>["one", "two"], :key_two=>["one", "two"]}
答案 2 :(得分:2)
还有countrybooting:
Hash[ my_hash.map {|key, val| key, val[0...x] } ]
其中x是您想要的值的数量;)
答案 3 :(得分:1)
你走了:
my_hash
# => {:key_one=>["one", "two", "three", "four", "five"],
# :key_two=>["one", "two", "three", "four", "five"]}
my_hash.map {|k,v| [k, v.first(2)]}.to_h
# => {:key_one=>["one", "two"], :key_two=>["one", "two"]}