私は1000個のユーザーオブジェクトを.eachループで処理しています。1000回の処理を.eachループで処理する方法、putsメッセージを100項目ごとに出力する方法は?
私はフィードバックのためのputsメッセージをコンソールに出力します。
どうすればいいですか、Rubyモジュラス演算子は何ですか?
私が試み:
if u.id % 100
puts u.id.to_s
end
私は1000個のユーザーオブジェクトを.eachループで処理しています。1000回の処理を.eachループで処理する方法、putsメッセージを100項目ごとに出力する方法は?
私はフィードバックのためのputsメッセージをコンソールに出力します。
どうすればいいですか、Rubyモジュラス演算子は何ですか?
私が試み:
if u.id % 100
puts u.id.to_s
end
はそれを試してみてください。
if u.id % 100 == 0
puts u.id.to_s
end
私はコードゴルフのためにこれが好きです:) –
:-)オブジェクトの配列を列挙し、インデックス100%が99(または0との間の他の値と等しいかどうかを確認し、 99を含む)。
この意志ループ2000倍、標準っぽいメッセージを出力毎に100のループ:進行状況インジケータのその種に
1.upto(2000).with_index do |j,i|
print "line #{i}\r" if (i % 100 == 0)
end
print "\ndone\n"
代替は、次のとおり
print '.' if (i % 100 == 0)
または単純なスピナー:
spinner = %w[ |/- \\ ]
1.upto(n).with_index do |j,i|
print spinner.rotate![0], "\r" if (i % 100 == 0)
# some long running task
end
print "\ndone\n"
- 0の場合は、データベースの行を読み取って作成されたActiveRecordオブジェクトから来ています。したがって、ソートがid
列に基づいていない場合は、ループしながら大きく変化する出力を得ることができます。また、データベースがしばらく存在していて、行を削除していた場合は、ギャップがid
個ある可能性があります。最終的な結果はあなたの「100回ごと」が非常に不正確かもしれません。
私はid
と比較しないことをお勧めしますし、代わりにあなたのループとしてあなたがインクリメント別の変数を使用するか、またはあなたの% 100 == 0
テストのために使用することができ、一貫インクリメント番号を提供するためにeach_with_index
または列挙のwith_index
を使用すると思います。
かわり.each
の.each_slice
を使用することができます。
rows.each_slice(100) do |slice|
slice.each do |row|
....
end
puts message
end
あなたは正しい考えを持っていますが、Rubyで「falsey」のみのものは 'false'をと' Nil'です。 「0」は実際に「真実」なので、フィリップのようにモジュラスがゼロに等しいかどうかを明示的にチェックする必要があります。また、あなたのアイデアは、100アイテムごとに1回ではなく、100アイテムごとに99アウトプットを供給していました。 –