說我有這樣的數據的哈希:有沒有一種內置的方式來獲得新的哈希組成的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。 –
您的標題和散列後面的文字很混亂。一方面你指的是「某個鍵」,另一方面是「多個鍵」。你想要哪一個答案? –