以下代码返回错误“无法将字符串转换为整数”,请帮助
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
答案 0 :(得分:3)
grade[sub] .each do |grd|
就是问题所在。
使用索引integer or a range of integers.
访问数组元素您正尝试使用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
如果你想要一个主题 - >使用Hash之类的Dave Newton说,使用等级集合可能会很好。
{"eng" => "grade 1","Math" => "grade 2","Sci" => "grade 3"}.each do |subject, grade|
puts "#{subject| #{grade}"
end
答案 1 :(得分:1)
当你这样做时
grade[sub] .each do |grd|
Ruby希望sub
使用整数来引用成绩列表中的位置。
答案 2 :(得分:0)
subject
和grade
都是数组。他们只能通过他们的位置访问。在each
循环中,块获取实际元素(在sub
中),而不是位置。因此,在第5行中,您尝试访问grade['eng']
,这将无效并产生错误。请注意,与例如PHP,数组和散列(关联数组)是不同的东西。
从您的代码中猜测,您可能希望使用each_index
代替each
,这会将索引号传递给块而不是元素。
答案 3 :(得分: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
然而,哈希可能更适合您的需求。