Saya sangat bingung tentang perbedaan antara each.with_indexdan each_with_index. Mereka memiliki tipe yang berbeda tetapi tampaknya identik dalam praktiknya.
Jawaban:
The with_indexMetode mengambil parameter opsional untuk mengimbangi indeks awal. each_with_indexmelakukan hal yang sama, tetapi tidak memiliki indeks awal opsional.
Sebagai contoh:
[:foo, :bar, :baz].each.with_index(2) do |value, index|
puts "#{index}: #{value}"
end
[:foo, :bar, :baz].each_with_index do |value, index|
puts "#{index}: #{value}"
end
Keluaran:
2: foo
3: bar
4: baz
0: foo
1: bar
2: baz
each_with_indexdiperkenalkan ke Ruby sebelumnya. with_indexdiperkenalkan nanti:
0.Saat ini, penggunaan with_indexakan lebih baik dari sudut pandang umum dan keterbacaan, tetapi dari sudut pandang mempercepat kode, each_with_indexberjalan sedikit lebih cepat daripada each.with_index.
Ketika Anda merasa bahwa satu metode dapat dengan mudah diungkapkan dengan rangkaian langsung dari beberapa metode, biasanya metode tunggal lebih cepat daripada rantai. Adapun contoh lain dari ini, reverse_eachberlari lebih cepat dari reverse.each. Metode ini ada alasannya.
reversecontoh, reversemengembalikan array lain, dan bukan enumerator. Jika mengembalikan enumerator, maka seharusnya tidak lebih lambat dengan implementasi yang baik.
with_indexmemungkinkan indeks mulai offset,with_indexumumnya lebih disukai bila digunakan bersama denganmap,reduce,collect, dll Singkatnya,map.with_indexmembaca lebih baik darieach_with_index.map. Dalam arti, ketika digunakan denganmap, itu adalah pengganti untuk metode yang tidak adamap_with_index.