学生标记哈希

时间:2016-04-08 18:17:12

标签: ruby hash iteration each

我见过用其他语言发布的解决方案但不是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返回。我想我可以使用数组并从中填充哈希值,但有没有办法使用用户输入的迭代来填充键和值的哈希?

1 个答案:

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

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