簡體   English   中英

Ruby 字符串數組到 hash

[英]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"]

首先,它恰好拼寫為“人”;)

由於需要生成鍵person1person2等,我將遍歷您的原始數組,將每個元素放入具有適當鍵的新 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM