Arrays 如何将哈希嵌入数组并在Ruby中迭代这些哈希?
我想在一个数组中创建几个散列,并遍历该数组以填充不同的键值Arrays 如何将哈希嵌入数组并在Ruby中迭代这些哈希?,arrays,ruby,hash,Arrays,Ruby,Hash,我想在一个数组中创建几个散列,并遍历该数组以填充不同的键值 participant = { "participant_name" => "", "cupcakes_sold" => 0, "cakes_sold" => 0, "cupcakes_left" => 0, "cakes_left" => 0 } participants = Array.new(4) #loops through 4 times to populate hash with valu
participant = {
"participant_name" => "",
"cupcakes_sold" => 0,
"cakes_sold" => 0,
"cupcakes_left" => 0,
"cakes_left" => 0
}
participants = Array.new(4)
#loops through 4 times to populate hash with values
participants.each do |participant|
puts "\nPlease enter participant name: "
participant["participant_name"] = gets.chomp
puts "\nHow many cupcakes did " + participant.fetch("participant_name") + " sell?"
participant["cupcakes_sold"] = gets.chomp.to_i
puts "\nHow many does " + participant.fetch("participant_name") + " have left?"
participant["cupcakes_left"] = gets.chomp.to_i
puts "\nHow many cakes did " + participant.fetch("participant_name") + " sell?"
participant["cakes_sold"] = gets.chomp.to_i
puts "\nHow many does " + participant.fetch("participant_name") + " have left?"
participant["cakes_left"] = gets.chomp.to_i
participants << participant
end
puts participants
参与者={
“参与者名称”=>“”,
“出售的纸杯蛋糕”=>0,
“出售的蛋糕”=>0,
“杯形蛋糕左”=>0,
“蛋糕左”=>0
}
参与者=数组。新建(4)
#循环4次以使用值填充哈希
参与者。每个人都做参与者
放置“\n请输入参与者名称:”
参与者[“参与者名称”]=get.chomp
放置“\n做了多少个纸杯蛋糕”+参与者。获取(“参与者名称”)+“出售?”
参与者[“出售的纸杯蛋糕”]=get.chomp.to\u i
放置“\n还有多少”+participant.fetch(“participant_name”)+“剩下?”
参与者[“纸杯蛋糕”]=get.chomp.to\u i
放置“\n做了多少蛋糕”+参与者。获取(“参与者名称”)+“出售?”
参与者[“出售的蛋糕”]=get.chomp.to\u i
放置“\n还有多少”+participant.fetch(“participant_name”)+“剩下?”
参与者[“蛋糕左”]=get.chomp.to\u i
参与者这里有一种方法
4.times.map do
participant = {}
puts "\nPlease enter participant name"
name = gets.chomp
participant["participant_name"] = name
["cupcakes", "cakes"].each do |item|
puts "How many #{item} did #{name} sell?"
participant["#{item}_sold"] = gets.to_i
puts "How many does #{name} have left?"
participant["#{item}_left"] = gets.to_i
end
participant
end
#=> [{ "participant_name"=>"Billy-Bob", "cupcakes_sold"=>46, "cupcakes_left=>12",
# "cakes_sold=>12, "cakes_left=>2 },
# { "participant_name"=>"Trixy", "cupcakes_sold"=>112, "cupcakes_left=>0",
# "cakes_sold=>85, "cakes_left=>0 },
# { "participant_name"=>"Bub", "cupcakes_sold"=>2, "cupcakes_left=>104",
# "cakes_sold=>1, "cakes_left=>18 },
# { "participant_name"=>"Wilma", "cupcakes_sold"=>64, "cupcakes_left=>"31",
# "cakes_sold=>18, "cakes_left=>9 }]
请注意,在“3\n”中chomp
。chomp.to#i#=>3
是不需要的:“3\n”。to#i#=>3
我认为一个问题是,当我启动大小为4的数组时,我创建了一个包含四个为零的元素的数组。当它在我的数组(particients.inspect)上调用inspect时,我看到前四个值实际上是nil,我的循环将这些nil值添加到数组中因此,这次在循环外部启动阵列时,我没有设置大小。
我的解决方案(模仿Cary Swoveland的做法):
#分配新的空参与者数组
参与者=Array.new()
#循环4次以使用值填充嵌入的哈希
多少次
#创建bakesale参与者的空哈希
参与者=Hash.new
放入“\n\e[36M参与者名称:\e[0m”
name=gets.chomp
参与者[“参与者姓名”]=姓名
[“饼干”、“蛋糕”]。每种都有|
睡眠0.25
将“\e[36mH有多少#{item}做了\e[0m#{name.capitalize}\e[36m销售(输入数字)?\e[0m”
参与者[“#{item}_selled”]=get.to_i
睡眠0.25
放置“\e[36m\e[0m{name.capitalize}\e[36m还剩下多少(输入数字)?\e[0m”
参与者[“#{item}_left”]=get.to_i
结束
#循环4次,将每个参与者添加到参与者数组
参与者尝试participants=newarray(4)){}
。请注意,外部的{}
是一个块,内部的{}
构造一个散列文本。这将为4个数组项播种正确的值以获取数据。
#allocates new empty array of participants
participants = Array.new()
#loops 4 times to populate embedded hash with values
num_participants.times do
#creates the empty hash of bakesale participants
participant = Hash.new
puts "\n\e[36mParticipant name:\e[0m"
name = gets.chomp
participant["participant_name"] = name
["cookies", "cakes"].each do |item|
sleep 0.25
puts "\e[36mHow many #{item} did \e[0m #{name.capitalize} \e[36m sell (enter number)?\e[0m"
participant["#{item}_sold"] = gets.to_i
sleep 0.25
puts "\e[36mHow many does \e[0m #{name.capitalize} \e[36m have left (enter number)?\e[0m"
participant["#{item}_left"] = gets.to_i
end
#loops through 4 times to add each participant to participants array
participants << participant
sleep 0.5
end