a = ['a', 'b', 'c']
a.each_with_index.reject {|el,i| i == 1}.each do |el,i|
# do whatever with the element
puts el
end
私見選択を行う代わりに、独自の明示的なif
文を使用しての良い方法です。しかし、それはif
とほぼ同じパフォーマンスになると思います。
ベンチマーク後に、これにかかる時間が間違いなく遅くなることがわかっていて、それが遅い原因となる選択である場合は、これを簡単に変更して多数の方法:
a = ['a', 'b', 'c']
n = 1
(a.first(n) + a.drop(n + 1)).each do |el|
# do whatever with the element
puts el
end
残念ながら私はこれも単純なifを実行するよりも遅くなると思います。スピードの可能性があると思われるものは、次のとおりです。
a = ['a', 'b', 'c']
n = 1
((0...n).to_a+((n+1)...a.size).to_a).map{|i| a[i]}.each do |el|
# do whatever with the element
puts el
end
しかし、これもやはり速度が遅くなる可能性が高いです。
EDIT
ベンチマークはthis gistです。これらの結果は実際には私を驚かせた、拒絶ははるかに遅い選択肢、続いて範囲。要素を一切削除しなかった後の最高性能は、first
とdrop
を使用して、その周りのすべての要素を選択していました。ベースラインとして何も選択を使用していない割合として
結果:
with if 146%
with first and drop 104%
without if 100%
これは明らかに、これはRubyが実行することができ、おそらく最速の操作でテストしていた、あなたが要素に何をすべきかに大きく依存しています。操作が遅いほど、これらの差異は少なくなります。いつものように:ベンチマークベンチマークベンチマーク
なぜ、配列の先頭に1というIDが設定されていないことを確認してください。 –
なぜ、rubyにarray.except要素メソッドがないのですか? –