学生成绩哈希

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]}

您根本不需要在循环的每个 运行 中遍历哈希,只有在需要从中提取一些信息时才应该这样做。