मैं वास्तव में each.with_indexऔर के बीच के अंतर के बारे में उलझन में हूँ each_with_index। उनके पास विभिन्न प्रकार हैं लेकिन व्यवहार में समान प्रतीत होते हैं।
जवाबों:
with_indexविधि प्रारंभिक सूचकांक की भरपाई के लिए एक वैकल्पिक पैरामीटर लेता है। each_with_indexएक ही बात करता है, लेकिन कोई वैकल्पिक शुरुआती सूचकांक नहीं है।
उदाहरण के लिए:
[: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
आउटपुट:
2: foo
3: bar
4: baz
0: foo
1: bar
2: baz
each_with_indexरूबी में पहले पेश किया गया था। with_indexबाद में पेश किया गया था:
0।आज, उपयोग with_indexसामान्यता और पठनीयता के दृष्टिकोण से बेहतर होगा, लेकिन कोड को गति देने के दृष्टिकोण से, की each_with_indexतुलना में थोड़ा तेज चलता है each.with_index।
जब आपको लगता है कि एक एकल विधि आसानी से कुछ तरीकों की सीधी जंजीर द्वारा व्यक्त की जा सकती है, तो यह आमतौर पर मामला है कि एकल विधि श्रृंखला की तुलना में तेज है। इस के एक अन्य उदाहरण के लिए, की reverse_eachतुलना में तेजी से चलाता है reverse.each। इन विधियों के अस्तित्व में होने का कारण है।
reverseउदाहरण के लिए, reverseएक और सरणी, और नहीं एक प्रगणक लौटा रहा है। यदि यह एक एन्यूमरेटर लौटाता है, तो यह एक अच्छा कार्यान्वयन के साथ धीमा नहीं होना चाहिए था।
with_indexएक शुरू करने सूचकांक ऑफसेट परमिट,with_indexआम तौर पर जब साथ संयोजन के रूप में प्रयोग किया जाता पसंद किया जाता हैmap,reduce,collect, आदि संक्षेप में,map.with_indexकी तुलना में बेहतर पढ़ता हैeach_with_index.map। एक अर्थ में, जब इसका उपयोग किया जाता हैmap, तो यह गैर-मौजूदmap_with_indexपद्धति के लिए एक स्टैंड-इन होता है ।