यदि सभी कुंजी तार हैं और उन सभी में अंडरस्कोर उपसर्ग है, तो आप इसके साथ हैश को पैच कर सकते हैं:
h.keys.each { |k| h[k[1, k.length - 1]] = h[k]; h.delete(k) }
k[1, k.length - 1]
बिट के सभी पकड़ लेता है k
पहले वर्ण को छोड़कर। यदि आप एक प्रति चाहते हैं, तो:
new_h = Hash[h.map { |k, v| [k[1, k.length - 1], v] }]
या
new_h = h.inject({ }) { |x, (k,v)| x[k[1, k.length - 1]] = v; x }
sub
यदि आप k[]
एक विकल्प निकालने के लिए संकेतन पसंद नहीं करते हैं तो आप इसका उपयोग भी कर सकते हैं :
h.keys.each { |k| h[k.sub(/\A_/, '')] = h[k]; h.delete(k) }
Hash[h.map { |k, v| [k.sub(/\A_/, ''), v] }]
h.inject({ }) { |x, (k,v)| x[k.sub(/\A_/, '')] = v; x }
और, यदि केवल कुछ कुंजियों में अंडरस्कोर उपसर्ग है:
h.keys.each do |k|
if(k[0,1] == '_')
h[k[1, k.length - 1]] = h[k]
h.delete(k)
end
end
इसी तरह के संशोधन उपरोक्त सभी अन्य वेरिएंट में किए जा सकते हैं लेकिन ये दोनों:
Hash[h.map { |k, v| [k.sub(/\A_/, ''), v] }]
h.inject({ }) { |x, (k,v)| x[k.sub(/\A_/, '')] = v; x }
उन कुंजियों के साथ ठीक होना चाहिए जिनमें अतिरिक्त संशोधनों के बिना अंडरस्कोर उपसर्ग नहीं हैं।