2012-05-11 50 views
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 
+0

你正在尝试用一个字符串索引一个数组。你想要一个散列而不是两个数组? –

+0

您是否可以向您的问题添加您期望看到的示例输出? –

回答

1

当你

grade[sub] .each do |grd| 

红宝石预计sub使用整数来引用等级的列表中的位置是。

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 

如果你想有一个主题 - >级收集它可能是好的,像Dave Newton说的那样使用Hash

{"eng" => "grade 1","Math" => "grade 2","Sci" => "grade 3"}.each do |subject, grade| 
    puts "#{subject| #{grade}" 
end 
0

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

从您的代码猜测,您可能想要使用each_index而不是each这将传递索引号到块而不是元素。

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 

的哈希但是可能更适合您的需求。

相关问题