প্রতিটি.বিহীন_ইন্ডেক্স এবং রুবিতে প্রতিটি_ও_ইন্ডেক্সের মধ্যে পার্থক্য?


94

আমি each.with_indexএবং এর মধ্যে পার্থক্য সম্পর্কে সত্যিই বিভ্রান্ত each_with_index। এগুলির বিভিন্ন প্রকার রয়েছে তবে অনুশীলনে এটি অভিন্ন বলে মনে হচ্ছে।


7
সামান্য পার্থক্য হল যে ছাড়াও with_indexশুরুর সূচক অফসেট অনুমতি দেয়, with_indexসাধারণত যখন সাথে ব্যবহার পছন্দ করা হয় map, reduce, collect, ইত্যাদি সংক্ষেপে, map.with_indexবেশী ভালো লেখা each_with_index.map। এক অর্থে, যখন এটি ব্যবহার করা হয় map, এটি অস্তিত্বহীন map_with_indexপদ্ধতির জন্য একটি স্ট্যান্ড-ইন ।
ক্যারি সোভেল্যান্ড

উত্তর:


173

with_indexপদ্ধতি শুরুর সূচক অফসেট একটি ঐচ্ছিক প্যারামিটার নেয়। each_with_indexএকই জিনিস, কিন্তু কোন বিকল্প startingচ্ছিক সূচক আছে।

উদাহরণ স্বরূপ:

[: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

41

each_with_indexএর আগে রুবির সাথে পরিচয় হয়েছিল। with_indexপরে চালু হয়েছিল:

  1. বিভিন্ন গণক দিয়ে বিস্তৃত ব্যবহারের অনুমতি দিতে।
  2. সূচকটি অন্য কোনও সংখ্যা থেকে শুরু করার অনুমতি দেয় 0

আজ, with_indexসাধারণতা এবং পঠনযোগ্যতার দৃষ্টিকোণ থেকে ব্যবহার করা ভাল হবে তবে কোডটি গতি বাড়ানোর দৃষ্টিকোণ থেকে, each_with_indexকিছুটা দ্রুত গতিতে চলেছে each.with_index

আপনি যখন মনে করেন যে কয়েকটি পদ্ধতির সোজা চেইন দ্বারা কোনও একক পদ্ধতি সহজেই প্রকাশ করা যেতে পারে, তবে সাধারণত একক পদ্ধতি চেইনের চেয়ে দ্রুত হয়। এর আর একটি উদাহরণ হিসাবে, তার reverse_eachচেয়ে দ্রুত চলে reverse.each। এই পদ্ধতিগুলির অস্তিত্বের কারণ রয়েছে।


4
যদিও ন্যায়সঙ্গত হতে হবে, অফসেটটি সূচকটি পরিবর্তন করে না, এটি কেবল সূচকে একটি সংখ্যা যুক্ত করে। আপনার কলের পরে আপনি যখন সূচীটি পরীক্ষা করেন, আপনি দেখতে পাবেন যে এটির কোনও প্রভাব নেই। যথারীতি ভাল নোটস, @ সোয়া
ভিজিওফ

4
আমি মনে করি না পারফ আলাদা হওয়া উচিত (কমপক্ষে যথেষ্ট নয়)। ইন reverseউদাহরণস্বরূপ, reverseঅন্য অ্যারের, এবং একটি গণনাকারী ফিরে আসছে। যদি এটি কোনও গণককে ফেরত দেয় তবে ভাল প্রয়োগের সাথে ধীর হওয়া উচিত ছিল না।
akostadinov
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.