[英]Ruby string array to hash
在 Ruby 中,如何將數組轉換為 hash? 我有一個這樣的數組
peaple [{"name":"Sam","year":"21"},
{"name":"cole","partition":"20"},
{"name":"bart","year":"21"}]
我想把這個數組放在 hash 中,如下所示,這樣我就可以檢查誰是 21 歲:
peaple {
person1 => {"name"=>"Sam","year"=>"21"},
person2 => {"name"=>"cole","partition"=>"20"},
person3 => {"name"=>"bart","year"=>"21"},
}
如何將此數組轉換為 hash? 我如何檢查誰是 21 歲?
您可以使用each_with_object
迭代“peaple”,並將當前元素作為鍵分配給新的 hash,使用前綴person加上當前元素 (person) 的索引。
peaple
.each_with_object({})
.with_index(1) do |(person, hash), index|
hash["person#{index}"] = person
end
# {"person1"=>{:name=>"Sam", :year=>"21"},
# "person2"=>{:name=>"cole", :partition=>"20"},
# "person3"=>{:name=>"bart", :year=>"21"}}
出於好奇的另一個版本是創建一個具有相同長度“peaple”的字符串數組,其值是前綴“person”加上它的索引加 1。用當前值壓縮它並在它上面調用to_h
給出相同的結果:
Array.new(peaple.length) { |i| "person#{i + 1}" }.zip(peaple).to_h
如果這個想法是通過使用“年份”鍵來獲取誰是 21 歲,那么您可以 select 那些具有年份 21 的元素並映射它們的名稱:
peaple
.select { |person| person[:year] == "21" }
.map { |person| person[:name] }
# ["Sam", "bart"]
首先,它恰好拼寫為“人”;)
由於需要生成鍵person1
、 person2
等,我將遍歷您的原始數組,將每個元素放入具有適當鍵的新 hash 中:
people_hash = {}
people.each_with_index do |person, index|
people_hash["person#{index + 1}"] = person
end
people_hash
#=> {"person1"=>{:name=>"Sam", :year=>"21"}, "person2"=>{:name=>"cole", :partition=>"20"}, "person3"=>{:name=>"bart", :year=>"21"}}
each_with_index
方法將遍歷數組的每個元素,但也會提供元素的當前索引,以便我們可以將它用於 hash 鍵。 我使用字符串插值來創建 hash 鍵 - 因為您想從 1 開始,所以我每次都將 1 添加到索引中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.