列挙可能なオブジェクトenumがあり、3 番目のアイテムを取得したいとします。
一般的なアプローチの1つは、配列に変換してから、次のようなインデックスでアクセスすることです。
enum.to_a[2]
ただし、この方法では一時的な配列が作成されるため、非効率的である可能性があります。
今私は使用します:
enum.each_with_index {|v, i| break v if i == 2}
しかし、これは非常に醜く冗長です。
これを行う最も効率的な方法は何ですか?
列挙可能なオブジェクトenumがあり、3 番目のアイテムを取得したいとします。
一般的なアプローチの1つは、配列に変換してから、次のようなインデックスでアクセスすることです。
enum.to_a[2]
ただし、この方法では一時的な配列が作成されるため、非効率的である可能性があります。
今私は使用します:
enum.each_with_index {|v, i| break v if i == 2}
しかし、これは非常に醜く冗長です。
これを行う最も効率的な方法は何ですか?
enumerable-lazyまたは Ruby 2.1を使用した mu の回答の代替。を使用するのと同じくらい怠惰nextですが、より宣言的です。
enum.lazy.drop(2).first
残念ながら、インデックスでメンバーにアクセスするには、配列に変換する必要があります (そうしないと、そもそもインデックスがありません)。そのため、コードは完全に問題ないように見えます。