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

件名が必要な場合は、-> 成績のコレクションで、Dave Newton が言ったよう にハッシュの使用を検討することをお勧めします。

{"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 = ['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 に答える
0

subjectgradeは両方とも配列です。それらは、その位置によってのみアクセスできます。あなたのeachループでは、ブロックは位置ではなく実際の要素 (in sub) を取得します。そのため、5 行目で にアクセスしようとしていますがgrade['eng']、これは機能せず、エラーが発生します。PHP などとは異なり、配列とハッシュ (連想配列) は別のものであることに注意してください。

コードから推測すると、要素の代わりにブロックにインデックス番号を渡すeach_index代わりに、 which を使用することをお勧めします。each

于 2012-05-11T14:16:41.240 に答える