学生成绩哈希
Student Marks Hash
我看过用其他语言发布的解决方案,但没有 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
显然我在尝试使用 each/iteration 填充散列时的逻辑存在问题,因为我一直得到 nil return。我想我可以使用数组并从中填充散列,但是有没有一种方法可以使用用户输入的迭代来填充键和值的散列?
您似乎误解了哈希在 Ruby 中的工作原理。我建议仔细阅读一下。
同时,试试这个:
student_grades = Hash.new {|h,k| h[k] = [] }
现在每次获得学生成绩时,您都可以将其推入该学生的哈希键的数组值中。
例如:
student_grades
=> {}
student_grades['Mark'] << 95
student_grades['Mark'] << 86
student_grades
=> {'Mark' => [95, 86]}
您根本不需要在循环的每个 运行 中遍历哈希,只有在需要从中提取一些信息时才应该这样做。
我看过用其他语言发布的解决方案,但没有 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
显然我在尝试使用 each/iteration 填充散列时的逻辑存在问题,因为我一直得到 nil return。我想我可以使用数组并从中填充散列,但是有没有一种方法可以使用用户输入的迭代来填充键和值的散列?
您似乎误解了哈希在 Ruby 中的工作原理。我建议仔细阅读一下。
同时,试试这个:
student_grades = Hash.new {|h,k| h[k] = [] }
现在每次获得学生成绩时,您都可以将其推入该学生的哈希键的数组值中。
例如:
student_grades
=> {}
student_grades['Mark'] << 95
student_grades['Mark'] << 86
student_grades
=> {'Mark' => [95, 86]}
您根本不需要在循环的每个 运行 中遍历哈希,只有在需要从中提取一些信息时才应该这样做。