প্রতিটি লুপে একটি হ্যাশ সূচকটি অ্যাক্সেস করা সম্ভব?


119

আমি সম্ভবত স্পষ্ট কিছু মিস করছি, তবে প্রতিটি লুপের প্রতিটি লুপের ভিতরে পুনরাবৃত্তির সূচক / গণনা অ্যাক্সেস করার কোনও উপায় আছে কি?

hash = {'three' => 'one', 'four' => 'two', 'one' => 'three'}
hash.each { |key, value| 
    # any way to know which iteration this is
    #   (without having to create a count variable)?
}

3
আনন: না, হ্যাশগুলি বাছাই করা হয় না।
মিকেল এস

হ্যাশগুলি প্রযুক্তিগতভাবে বাছাই করা হয় না তবে রুবিতে আপনি এগুলি একটি অর্থে বাছাই করতে পারেন। বাছাই করুন () এগুলি একটি বাছাইকৃত নেস্টেড অ্যারেতে রূপান্তর করবে, যা আপনি এটির পরে আবার একটি হ্যাশে রূপান্তর করতে পারবেন: your_hash.sort.to_h
jlese

উত্তর:


296

আপনি যদি প্রতিটি পুনরাবৃত্তির সূচি জানতে চান তবে আপনি ব্যবহার করতে পারেন .each_with_index

hash.each_with_index { |(key,value),index| ... }

24
বিশেষভাবে:hash.each_with_index { |(key,value),index| ... }
রমম্পান

22
পেরেনগুলি প্রয়োজনীয় বি / সি hash.eachপ্রতিটি কী-মান জুটি দেয় Array(key,value) = arrপ্রথম মান (কী) এর মধ্যে keyএবং দ্বিতীয়টি এর মধ্যে রেখে প্যারেনগুলি একই কাজ করে value
রামপিন

1
ধন্যবাদ @ এস.মার্ক, @ আরম্পিয়ন, যে কাজ করেছে। আমি each_with_indexআরডিএকে হ্যাশের জন্য তালিকাভুক্ত দেখিনি: রুবি- ডক । এখন আমি দেখতে পাচ্ছি যে এটি গণনার সদস্য। তবে খুব খারাপ যে আরডোক each_with_indexহ্যাশ এইচটিএমএল থেকে রেফারেন্সটি অতিক্রম করতে পারে না ।
Upgradingdave

2
@ ডেভ_প্যারোলিক আমি প্রায়শই একই কামনা করি। ক্লাসের পদ্ধতিগুলি পরীক্ষা করার জন্য vi ব্যবহার করার সময় আমি প্যারেন্ট মডিউলগুলি ম্যানুয়ালি চেক করে দেখতে পেয়েছি। প্রায়শই আমি কেবল এড়িয়ে যাই irb, এবং ClassName#instance_methodsনিশ্চিত করেছি যে আমি কিছুই মিস করেছি তা নিশ্চিত করতে ব্যবহার করি।
রায়পুম

ধন্যবা, @rampion, ClassName#instance_methodsখুব সহায়ক হয়েছে
Upgradingdave

11

আপনি কীগুলির মাধ্যমে পুনরাবৃত্তি করতে পারেন এবং মানগুলি নিজেই বের করতে পারেন:

hash.keys.each_with_index do |key, index|
   value = hash[key]
   print "key: #{key}, value: #{value}, index: #{index}\n"
   # use key, value and index as desired
end

সম্পাদনা: রামপম্পানের মন্তব্য অনুসারে, আমি কেবল শিখেছি আপনি পুনরাবৃত্তি করলে আপনি কী হিসাবে মূল এবং মান উভয়ই পেতে পারেন hash:

hash.each_with_index do |(key, value), index|
   print "key: #{key}, value: #{value}, index: #{index}\n"
   # use key, value and index as desired
end

লুপের ভিতরে এবং একটি ভ্রান্ত কোড থেকে পুনরাবৃত্ত সংগ্রহটি অ্যাক্সেসের জন্য ডাউনভোটেড: keyপ্রথম লুপে কী + মান জোড়ার একটি অ্যারে থাকে, সুতরাং এটিকে সূচক হিসাবে ব্যবহার hashকরা ভুল। আপনি কি কখনও এটি পরীক্ষা করেছেন?
সাসকিউ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.