Вы можете использовать each_with_object
, чтобы перебрать "peaple" и назначить новому хешу текущий элемент, используя в качестве ключа префикс 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. Zipс текущим значением и вызовом to_h
дает тот же результат:
Array.new(peaple.length) { |i| "person#{i + 1}" }.zip(peaple).to_h
Если идея состоит в том, кто получает 21 с помощью клавиши «год», то вы можете выбрать эти элементы с помощьюгод 21 и отображение затем их имена:
peaple
.select { |person| person[:year] == "21" }
.map { |person| person[:name] }
# ["Sam", "bart"]