एक मिश्रित हैश के लिए/सरणी नेस्टेड संरचना आप वें उपयोग कर सकते हैं है। (सरणी के लिए भी संशोधित)
def unflatten(h={})
ret = {}
h.each do |k,v|
node = ret
keys = k.split('.').collect { |x| x.to_i.to_s == x ? x.to_i : x }
keys.each_cons(2) do |x, next_d|
if(next_d.is_a? Fixnum)
node[x] ||= []
node=node[x]
else
node[x] ||={}
node=node[x]
end
end
node[keys[-1]] = v
end
ret
end
बशर्ते आपने नीचे फ़्लैटिंग के लिए उपयोग किया हो। (सरणी के बजाय कुंजी के लिए अलग स्ट्रिंग डॉट [पर विभाजित करता है, तो आप की जरूरत है।])
def flatten_hash(hash)
hash.each_with_object({}) do |(k, v), h|
if v.is_a? Hash
flatten_hash(v).map do |h_k, h_v|
h["#{k}.#{h_k}"] = h_v
end
elsif v.is_a? Array
flatten_array(v).map do |h_k,h_v|
h["#{k}.#{h_k}"] = h_v
end
else
h[k] = v
end
end
end
def flatten_array(array)
array.each_with_object({}).with_index do |(v,h),i|
pp v,h,i
if v.is_a? Hash
flatten_hash(v).map do |h_k, h_v|
h["#{i}.#{h_k}"] = h_v
end
elsif v.is_a? Array
flatten_array(v).map do |h_k,h_v|
h["#{i}.#{h_k}"] = h_v
end
end
end
end
स्रोत
2015-12-18 11:46:40
कुछ भी नहीं "पुनरावर्ती" उस के बारे में, कि सादे नेस्टेड है। –
@dominikh विशेष हैश रिकर्सिव नहीं हो सकता है, लेकिन जो भी एल्गोरिदम इसे बनाने के लिए रिकर्सिव होगा। लेकिन मुझे लगता है कि आप जो कहते हैं वह समझ में आता है। मैंने इसे संपादित किया। – sawa
आपने अभी तक क्या प्रयास किया है? आपके प्रयास किए गए समाधान के बारे में विशेष रूप से क्या काम नहीं कर रहा है? – maerics