2015-07-28 8 views
8

Ruby Array documentation के अनुसार, to_h एक विधि है जिसका उपयोग सरणी को हैश में कनवर्ट करने के लिए किया जा सकता है जब तक कि सरणी का प्रत्येक तत्व दो तत्वों की एक और सरणी न हो।रूबी सरणी पर 'to_h' अपरिभाषित विधि

irb(main):001:0> p [[:foo, :bar], [1, 2]].to_h 
NoMethodError: undefined method `to_h' for [[:foo, :bar], [1, 2]]:Array 
     from (irb):1 
     from E:/RubyInstall/bin/irb:12:in `<main>' 
irb(main):002:0> 

मेरे रूबी संस्करण

C:\>ruby -v 
ruby 2.0.0p247 (2013-06-27) [x64-mingw32] 

मैं इस का उपयोग करना चाहता है: एक ही दस्तावेज़ से नीचे दिए गए उदाहरण

p [[:foo, :bar], [1, 2]].to_h 

हालांकि, जब मैं ऊपर कोड चलाने के लिए, मैं इस त्रुटि मिलती है स्टैक ओवरफ्लो पर एक और प्रश्न का उत्तर देने के लिए तकनीक, लेकिन अब मैं अटक गया हूं रूबी की एक दस्तावेजी विशेषता मेरे लिए काम नहीं कर रही है।

+0

@ Зелёный धन्यवाद –

+2

एक नोट आप अभी भी संगत 'हैश का उपयोग कर सकते हैं :: []' 'हैश की तरह वाक्यविन्यास [[[: foo,: बार], [1, 2]]]' निर्माण करने के लिए रूबी <2.1 – engineersmnky

+0

@engineersmnky में एक ही परिणाम आश्चर्यजनक लगता है! –

उत्तर

7

to_h विधि केवल रूबी संस्करण 2.1 या उच्चतर में उपलब्ध है।

चेक रिहाई यहाँ

http://pivotallabs.com/ruby-2-1-0-changes-of-note/

+0

धन्यवाद करेगा। मेरी रूबी अपग्रेड करेगा। :-) –

1

रूबी 2.0 नोटों to_h विधि का समर्थन नहीं करता। यह 2.1 और उच्चतर

7

हां, यह रूबी 2.1 की तुलना में निचले संस्करण के लिए समर्थित नहीं है, यदि आप वैकल्पिक खोज रहे हैं। इस

keys = [:foo, :bar] 
vals = [1, 2] 
Hash[*keys.zip(vals).flatten] 
=> {:foo=>1, :bar=>2} 
+0

रूबी 2.1.0 'to_h' प्रलेखन में ध्यान देने योग्य मूल्य,' [[: foo,: bar], [1, 2]]। To_h' का परिणाम '{: foo =>: bar, 1 => 2} 'https://ruby-doc.org/core-2.1.0/Array.html#method-i-to_h – ReggieB

2

निम्नलिखित कोड होगा बंदर पैच सरणी की कोशिश करो और कोड का उपयोग कर एक to_h विधि प्रदान करते हैं @ engineersmnky की टिप्पणी में दे अगर to_h पहले से ही निर्धारित नहीं है - वह यह है कि पूर्व 2.1 माणिक वातावरण में।

unless [].respond_to? :to_h 
    class Array 
    def to_h 
     Hash[self] 
    end 
    end 
end 
संबंधित मुद्दे