रूबी मिश्रित सरणी नेस्टेड हैश - रूबी-ऑन-रेल, रूबी, हैश, बहुआयामी-सरणी, हैशपैप

मेरे पास रूबी सरणी है जिसका तत्व स्ट्रिंग्स और हैश के बीच वैकल्पिक है। उदाहरण के लिए-

["1234", Hash#1, "5678", Hash#2]

मैं इससे घोंसला वाली हैश संरचना बनाना चाहता हूं। इसलिए,

hash["1234"]["key in hash#1"] = value
hash["5678"]["key in hash#2"] = value

क्या किसी के पास ऐसा करने का अच्छा तरीका है? धन्यवाद।

उत्तर:

जवाब के लिए 5 № 1

बस उपयोग करें

hsh = Hash[*arr] #suppose arr is the array you have

यह एक समय में 2 टुकड़ा करेगा और हैश में परिवर्तित होगा।


जवाब के लिए 2 № 2

मुझे नहीं लगता कि सर करने के लिए सरणी पर एक विधि है। निम्नलिखित कोड काम करता है और पढ़ने में काफी आसान है।

hsh = {}

ary.each_slice(2) do |a, b|
hsh[a] = b
end

# Now `hsh` is as you want it to be

उत्तर № 3 के लिए 1

आप जो चाहते हैं उस पर अनुमान लगाएं "हैश # 1 में कुंजी" बिल्कुल स्पष्ट नहीं है, न ही आपने परिभाषित किया है hash या value होना चाहिए:

value = 42

h1 = {a:1}
h2 = {b:2}
a = ["1234",h1,"5678",h2]
a.each_slice(2).each{ |str,h| h[str] = value }
p h1, #=> {:a=>1, "1234"=>42}
h2  #=> {:b=>2, "5678"=>42}

वैकल्पिक रूप से, शायद आप इसका मतलब है:

h1 = {a:1}
h2 = {b:2}
a = ["1234",h1,"5678",h2]

hash = Hash[ a.each_slice(2).to_a ]
p hash             #=> {"1234"=>{:a=>1}, "5678"=>{:b=>2}}
p hash["1234"][:a] #=> 1

उत्तर के लिए 1 № 4

बस अनुमान के लिए पहलुओं का उपयोग करते हुए अनुमान लगाएं:

require "facets"
xs = ["1234", {:a => 1, :b => 2}, "5678", {:c => 3}]
xs.each_slice(2).mash.to_h
#=> {"1234"=>{:a=>1, :b=>2}, "5678"=>{:c=>3}}

संबंधित सवाल
सबसे लोकप्रिय