2016-07-21 7 views
0

ruby​​でforeachループを使用することについて質問があります。Rubyでforループを使用してデータを取得する

文書を表示するには、foreachループを使用してこれらの文書を表示します。これは、i変数がdata["response"]["docs"][i]["topic"]の内部にあるエラーを返します。これは繰り返し処理中のJSON文字列です。

私はそれがなぜ理解できません。誰かが私が間違っていることを教えてもらえますか?

私が単にdata["response"]["docs"][0]["topic"]を実行すると、それはうまく動作しますが、iでは機能しません。何故ですか?

<% 
(0..10).each do |i| 
%> 
<%= i %> <br/> 
<%= data["response"]["docs"][i]["topic"] %> 
<% 
end 
%> 
+1

を' ''どこのnをn.times'を使用することを検討してください'はループしたい回数です。それははるかに読みやすく理解できる。 –

答えて

1

私の質問は、data["response"]["docs"]にいくつですか?正確に11はありますか?いずれかの方法では、私が代わりに次のコードを使用しないだろう:

<% data["response"]["docs"].each_with_index do |item, index| %> 
<%= index %> 
<br/> 
<%= item["topic"] %> 
<% end %> 

この繰り返し処理をdata["response"]["docs"]上にかかわらずがいくつあるか(あるかどうかを1つのDOCまたは20のドキュメントである)とitemという名前の変数に値を格納します。 each_with_index関数は、indexに格納されているインデックスも提供するので、後で表示することができます。最初の11件だけを使用したい場合:

<% data["response"]["docs"].first(11).each_with_index do |item, index| %> 

これは、最大11個のドキュメントアイテムを取得します。

+0

これは何百ものドキュメントで構成されていますが、最初の10個を最初に表示したいと思います。これは魅力的です。私はあなたがこのようなループを作成できることを知りませんでした、ありがとう! – Benny

0

それはあなたがエラーを投稿していないので、間違っているかもしれないもの伝えるのは難しいですが、あなたは、10要素の配列を使用している場合、あなたは何をしたい:

(0..9).each do |i|

0をして0から10の範囲ではなく、0から9までの範囲を使用する必要があります。存在しない要素(インデックス10)にアクセスしようとしているため、エラーが発生している可能性があります。

<% data["response"]["docs"].each do |document| %> 
<%= document["topic"] %> 
<% end %> 

か、インデックス印刷する必要がある場合:

さらに良いことがある(0..10) `よりもむしろ

<% data["response"]["docs"].each_with_index do |document, index| %> 
<%= index %> <br/> 
<%= document["topic"] %> 
<% end %> 
+0

'...'を使用しないことをお勧めします。 3ドットバージョンは読みにくく、多くの開発者には知られていないため、保守中にバグが挿入される可能性があります。末尾の数字を1つ減らして2ドットバージョンの '..'を使う方が良い/慣用です。 –

+0

面白いので、代わりにやります。ありがとうTin Man。 回答が編集されました。 – jktin12

+0

これも考えてみましょう: '(0..9).each do | i |'より '10.times | i |'をすれば分かりやすいでしょう。 'i'はまだ0から9までカウントされますが、コードは10回ループします。 –

関連する問題