0

以下代码返回错误“无法将字符串转换为整数”,请帮助

subject = ['eng','Math','Sci']
grade = ['grade 1','grade 2','grade 3']
subject.each do |sub|
    puts ("some string")
    grade[sub] .each do |grd|
        puts ("some string")
    end
end
4

4 回答 4

3

grade[sub] .each do |grd|那就是问题所在。

通过使用整数索引或整数范围来访问数组元素。

您正在尝试使用存储在sub. 由于这是一个普通的 .each 循环,它将循环数组中的所有元素,在本例中为'eng','Math','Sci'. 如果你想要例如的位置,'eng'你可以使用.each_with_index

它可能应该只是

grade.each do |grd|

each_with_index 会是

subject.each_with_index do |sub, index|
  print sub
  print grade[index]
end

如果您想要一个主题-> 成绩集合,那么像戴夫牛顿所说 的那样考虑使用哈希可能会很好。

{"eng" => "grade 1","Math" => "grade 2","Sci" => "grade 3"}.each do |subject, grade|
  puts "#{subject| #{grade}"
end
于 2012-05-11T14:16:03.197 回答
1

当你这样做

  grade[sub] .each do |grd|

Ruby 希望sub使用整数来引用成绩列表中的位置。

于 2012-05-11T14:16:52.423 回答
0

subject并且 grade都是数组。他们只能通过他们的位置来访问。在您的each循环中,块获取实际元素(in sub),而不是位置。因此,在第 5 行中,您尝试访问grade['eng'],这将不起作用并产生错误。请注意,与 PHP 不同,数组和散列(关联数组)是不同的东西。

从您的代码中猜测,您可能希望使用each_index而不是each将索引号传递给块而不是元素。

于 2012-05-11T14:16:41.240 回答
0

我不确定我是否理解您要达到的目标;但是,如果您想打印科目和成绩,并且您确定数组中元素的相对顺序,您可以这样做:

subject = ['eng','Math','Sci']
grade = ['grade 1','grade 2','grade 3']
subject.each_with_index do |sub, idx|
    puts "#{sub} - #{grade[idx]}"
end

输出:

eng - grade 1
math - grade 2
sci - grade 3

然而,哈希可能更适合您的需求。

于 2012-05-11T14:27:59.127 回答