说我有这样的数据的哈希:有没有一种内置的方式来获得新的哈希组成的Ruby只有一定的密钥?
data = [{..}, {..}, {..}]
每个散列是这样
{ :ctiy => 'sdfd', :pop => 33, :best_food=> 'sdfa'....}
现在怎样可以得到只包含某些键/值或多个密钥散列数组。所以拿城市来说,如果我想要新的只包含城市的哈希数组。
我知道,我可以循环和手动过滤,但有一种内置的方法,我失踪了。
说我有这样的数据的哈希:有没有一种内置的方式来获得新的哈希组成的Ruby只有一定的密钥?
data = [{..}, {..}, {..}]
每个散列是这样
{ :ctiy => 'sdfd', :pop => 33, :best_food=> 'sdfa'....}
现在怎样可以得到只包含某些键/值或多个密钥散列数组。所以拿城市来说,如果我想要新的只包含城市的哈希数组。
我知道,我可以循环和手动过滤,但有一种内置的方法,我失踪了。
map
将帮助:
original_array_of_hashes.map do |hash|
{ city: hash[:city] }
end
如果你使用Rails,该slice
方法可用:
original_array_of_hashes.map do |hash|
hash.slice(:city)
end
对于多键:
# without 'slice'
original_array_of_hashes.map do |hash|
{ key_one: hash[:key_one], key_two: hash[:key_two] }
end
# with 'slice'
original_array_of_hashes.map do |hash|
hash.slice(:key_one, :key_two)
end
我想这是最简单的方法,并没有本地的方式来做到这一点 –
arr = [{ :city => 'Paris', :country => 'France', :pop => 2240001 },
{ :city => 'Bardelona', :country => 'Spain', :pop => 1600002},
{ :city => 'Vancouver', :country => 'Canada', :pop => 603503 }]
def some_keys(arr, *keys_to_keep)
arr.map { |h| h.select { |k,_| keys_to_keep.include? k } }
end
some_keys (arr)
#=> [{}, {}, {}]
some_keys(arr, :city)
#=> [{:city=>"Paris"}, {:city=>"Bardelona"}, {:city=>"Vancouver"}]
some_keys(arr, :city, :pop)
#=> [{:city=>"Paris", :pop=>2240001},
# {:city=>"Bardelona", :pop=>1600002},
# {:city=>"Vancouver", :pop=>603503}]
some_keys(arr, :city, :country, :pop)
#=> [{:city=>"Paris", :country=>"France", :pop=>2240001},
# {:city=>"Bardelona", :country=>"Spain", :pop=>1600002},
# {:city=>"Vancouver", :country=>"Canada", :pop=>603503}]
这使用(不是Enumerable#select)。
我不明白。如果'keys_to_keep = []'你想返回'arr'? –
您可能正在寻找Array的地图方法。类似于data.map {| i |我[:city]}或data.map {| i | {city:i [:city]}} –
我们希望看到您为解决这个问题付出了多少努力,无论是使用最小代码展示您尝试的内容,还是您在何处搜索了解为什么这些网页没有帮帮我。因为它看起来像你希望我们为你写代码,这不是它的目的。请阅读“[问]”,包括链接的页面,以及http://meta.stackoverflow.com/q/261592/128421。 –
您的标题和散列后面的文字很混乱。一方面你指的是“某个键”,另一方面是“多个键”。你想要哪一个答案? –