【发布时间】:2018-11-22 04:25:24
【问题描述】:
我正在尝试用 Ruby 编写一个程序,该程序允许一个数组从另一个数组接收信息。基本上,我有一个名为“student_array”的多维数组,其中包含一些学生的信息
student_array = [["Mike", 13, "American", "male"],
["Grace", 12, "Canadian", "female"],
["Joey", 13, "American", "male"],
["Lily", 13, "American", "female"]
]
我还初始化了另外两个将计算国籍的数组:
nationality_array = Array.new
nationality_count = Array.new
这个程序的目的是遍历学生数组,统计学生的不同国籍,并创建一个 CSV 文件,其中包含不同国籍的标题,以及每个民族的计数。
预期输出.csv
American, Canadian
3, 1
这是我目前的代码
student_array.each do |student|
#pushes the nationality string into the nationality array
nationality_array.push(student[2])
end
因此,nationality_array 目前应该如下所示:
nationality_array = ["American", "Canadian", "American", "American"];
nationality_array.uniq = ["American", "Canadian"];
所以我将有两个标题 - “美国”和“加拿大”
现在我需要一种方法来遍历 student_array,计算“American”和“Canadian”的每个实例,并以某种方式将其分配回国籍数组。我很难想象如何去做。这就是我目前所拥有的——
american_count = 0;
canadian_count = 0;
student_array.each do |student|
if student[2] = "American"
american_count++
elsif student[2] = "Canadian"
canadian_count++
end
end
nationality_count.push(american_count);
nationality_count.push(canadian_count);
好的,现在我在 nationality_count 数组中有这些计数,但是如何将其传递给 CSV,确保它们被分配给正确的标题?我觉得我的代码很笨拙,也可以更加精简。
它可能看起来像这样?
CSV.open("output/redemptions.csv", "wb") do |csv|
csv << [nationality_array]
csv << [nationality_count]
end
任何人都可以提供有关更清洁方法的任何见解吗?
【问题讨论】:
标签: arrays ruby csv sorting each