Câu trả lời:
Các with_indexphương pháp lấy một tham số tùy chọn để bù đắp các chỉ số bắt đầu. each_with_indexlàm điều tương tự, nhưng không có chỉ mục bắt đầu tùy chọn.
Ví dụ:
[: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
Kết quả đầu ra:
2: foo
3: bar
4: baz
0: foo
1: bar
2: baz
each_with_indexđã được đưa vào Ruby trước đó. with_indexđã được giới thiệu sau:
0.Ngày nay, việc sử dụng with_indexsẽ tốt hơn từ quan điểm tổng quát và dễ đọc, nhưng từ quan điểm tăng tốc mã, each_with_indexchạy nhanh hơn một chút each.with_index.
Khi bạn cảm thấy rằng một phương pháp duy nhất có thể dễ dàng được thể hiện bằng cách xâu chuỗi đơn giản một vài phương thức, thì thường là phương pháp đơn nhanh hơn chuỗi. Đối với một ví dụ khác về điều này, reverse_eachchạy nhanh hơn reverse.each. Những phương pháp này có lý do để tồn tại.
reverseví dụ, hàm reversetrả về một mảng khác, không phải là một liệt kê. Nếu nó trả về một điều tra viên, thì nó không nên chậm hơn với việc triển khai tốt.
with_indexcho phép một chỉ số bắt đầu bù đắp,with_indexthường được ưa thích khi sử dụng kết hợp vớimap,reduce,collectvv Nói tóm lại,map.with_indexđọc tốt hơn so vớieach_with_index.map. Theo một nghĩa nào đó, khi được sử dụng vớimap, nó là một giá trị thay thế chomap_with_indexphương thức không tồn tại .