Я пытаюсь написать программу на 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
, поэтому на данный момент национальность_array должна выглядеть следующим образом:
nationality_array = ["American", "Canadian", "American", "American"];
nationality_array.uniq = ["American", "Canadian"];
Итак, у меня будет два заголовка -«Американец» и «Канадец»
Теперь мне нужен способ, чтобы просмотреть цикл student_array, подсчитать каждый экземпляр «американца» и «канадца» и каким-то образом присвоить его обратно в массив национальности.Мне трудно представить, как это сделать.Это то, что у меня пока есть -
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
Может ли кто-нибудь рассказать о более чистомспособ пойти об этом?