Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何将哈希嵌入数组并在Ruby中迭代这些哈希?_Arrays_Ruby_Hash - Fatal编程技术网

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