次のコードは「文字列を整数に変換できません」というエラーを返します。助けてください
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
件名が必要な場合は、-> 成績のコレクションで、Dave Newton が言ったよう にハッシュの使用を検討することをお勧めします。
{"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 = ['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
ただし、ニーズにはおそらくハッシュの方が適しています。
subject
と grade
は両方とも配列です。それらは、その位置によってのみアクセスできます。あなたのeach
ループでは、ブロックは位置ではなく実際の要素 (in sub
) を取得します。そのため、5 行目で にアクセスしようとしていますがgrade['eng']
、これは機能せず、エラーが発生します。PHP などとは異なり、配列とハッシュ (連想配列) は別のものであることに注意してください。
コードから推測すると、要素の代わりにブロックにインデックス番号を渡すeach_index
代わりに、 which を使用することをお勧めします。each