以下代码返回错误“无法将字符串转换为整数”,请帮助
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
以下代码返回错误“无法将字符串转换为整数”,请帮助
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
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
当你这样做
grade[sub] .each do |grd|
Ruby 希望sub
使用整数来引用成绩列表中的位置。
subject
并且 grade
都是数组。他们只能通过他们的位置来访问。在您的each
循环中,块获取实际元素(in sub
),而不是位置。因此,在第 5 行中,您尝试访问grade['eng']
,这将不起作用并产生错误。请注意,与 PHP 不同,数组和散列(关联数组)是不同的东西。
从您的代码中猜测,您可能希望使用each_index
而不是each
将索引号传递给块而不是元素。
我不确定我是否理解您要达到的目标;但是,如果您想打印科目和成绩,并且您确定数组中元素的相对顺序,您可以这样做:
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
然而,哈希可能更适合您的需求。