我见过用其他语言发布的解决方案但不是Ruby,所以我在这里问。
我正在尝试使用Ruby创建学生标记系统,这应该取用学生的名字和用户为该特定学生的两个标记。
我决定尝试将这些存储在哈希中,以便最终看起来像:
student_marks = {
"Steve" => 45, 65,
"James" => 20, 75,
"Scott" => 30, 90
}
我的代码尝试如下:
continue = "y"
student_grades = Hash.new
while continue == "y"
puts "Please enter student name"
name = gets.chomp
puts "Please enter the first grade for #{name}"
grade_one = gets.chomp.to_i
puts "Please enter the second grade for #{name}"
grade_two = gets.chomp.to_i
student_grades.each do |key, value|
student_grades[key] = name
student_grades[value] = grade_one
student_grades[value][1] = grade_two
end
puts "Do you want to continue? y or n"
continue = gets.chomp
end
puts student_grades
显然我的逻辑在尝试使用每个/迭代填充哈希时存在问题,因为我一直得到nil返回。我想我可以使用数组并从中填充哈希值,但有没有办法使用用户输入的迭代来填充键和值的哈希?
答案 0 :(得分:0)
你似乎误解了Ruby中的哈希是如何工作的。我建议稍微阅读一下。
与此同时,试试这个:
student_grades = Hash.new {|h,k| h[k] = [] }
现在每次获得学生成绩时,都可以将其推入该学生的哈希键的数组值。
例如:
student_grades
=> {}
student_grades['Mark'] << 95
student_grades['Mark'] << 86
student_grades
=> {'Mark' => [95, 86]}
在循环的每次运行中,您根本不需要遍历散列,只有在需要从中提取某些信息时才应该这样做。