प्रत्येक लूप में सूचकांक को एक्सेस करना संभव है?


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
jlesse

जवाबों:


296

यदि आप प्रत्येक पुनरावृत्ति के सूचकांक को जानना चाहते हैं, जिसका आप उपयोग कर सकते हैं .each_with_index

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

24
विशेष रूप से:hash.each_with_index { |(key,value),index| ... }
रैंपियन

22
parens आवश्यक हैं b / c hash.eachप्रत्येक की-वैल्यू पेयर को a में देता है Array। परेंस वही काम करता है (key,value) = arr, जैसे कि पहले वैल्यू (की) में key, और दूसरा में value
रैंपियन

1
धन्यवाद @ S.Mark, @ क्रैम्पियन, जिसने काम किया। मैंने each_with_indexHash के लिए RDoc में सूचीबद्ध नहीं देखा : ruby-doc.org/core/classes/Hash.html । अब मैं देखता हूं कि यह एनुमेरबल का सदस्य है। लेकिन बहुत बुरा है कि RDoc each_with_indexHash.html से संदर्भ को पार नहीं कर सकता है ।
अपग्रेडेडेव

2
@Dave_Paroulek मैंने अक्सर वही चाहा है। मैंने पाया है कि कक्षाओं के तरीकों की जांच करने के लिए vi का उपयोग करते समय मैं मूल रूप से मूल मॉड्यूल की जांच कर रहा हूं। अक्सर मैं बस छोड़ देता हूं irb, और ClassName#instance_methodsयह सुनिश्चित करने के लिए उपयोग करता हूं कि मुझे कुछ भी याद नहीं है।
२०:२० बजे प्राचीर

Thx, @ क्रैम्पियन, ClassName#instance_methodsबहुत उपयोगी रहा है
अपग्रेड करने

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गलत है। क्या आपने कभी इसका परीक्षण किया है?
सासक्यू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.