/ रूबी में एक सरणी से दूसरे सरणी के कुछ तत्वों को मैप करें? - ऐरे, रूबी

एक सरणी के कुछ तत्वों का नक्शा रूबी में एक और सरणी के लिए?-arrays, रूबी

मेरे पास इस तरह की एक सरणी है:

[1,2,3,2,4,5,3,7,8]

मैं उन्हें अन्य तत्वों के लिए मैप करना चाहता हूं 2 => "बी", 3 => "ए"

[1,"b","a","b",4,5,"a",7,8]

इसे करने के लिए कुछ रणनीतियाँ क्या हैं।

उत्तर:

उत्तर № 1 के लिए 7
arr = [1,2,3,2,4,5,3,7,8]
h = { 2=>"b", 3=>"a" }

h.default_proc = ->(_,k) { k }
h.values_at(*arr)
#=> [1, "b", "a", "b", 4, 5, "a", 7, 8]

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

का उपयोग Hash मानचित्रण और उपयोग के रूप में Array#map नया सरणी मैप करने के लिए:

mapping = {2 => "b", 3 => "a" }
[1,2,3,2,4,5,3,7,8].map { |x| mapping.fetch(x, x) }
=> [1, "b", "a", "b", 4, 5, "a", 7, 8]

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

यहाँ एक और संभव समाधान, के समान है @falsetru का जवाब:

mapping = Hash.new {|_, v| v }.merge(2 => "b", 3 => "a")
[1, 2, 3, 2, 4, 5, 3, 7, 8].map(&mapping.method(:[]))
# => [1, "b", "a", "b", 4, 5, "a", 7, 8]

में फ़ीचर # 11262 - अधिक वस्तुएं बनाएं जैसे "कार्य" रूबी इश्यू ट्रैकर पर, मैंने सुझाव दिया कि Hashतों को चाबियों से मानों तक के कार्यों की तरह व्यवहार करना चाहिए, यानी उन्हें लागू करना चाहिए call तथा to_proc, जो आपको पास करने की अनुमति देगा mapping सीधे रूप में परिवर्तन समारोह map:

[1, 2, 3, 2, 4, 5, 3, 7, 8].map(&mapping)
# => [1, "b", "a", "b", 4, 5, "a", 7, 8]

जब तक मेरा सुझाव लागू नहीं हो जाता (जो शायद "कभी नहीं" है, यह देखते हुए कि किसी ने दो महीने में भी इसे नहीं देखा है), तो आपको काम करने के लिए इस बंदर पैच की आवश्यकता है:

module HashAsFunction
refine Hash do
alias_method :call, :[]

def to_proc
method(:call).to_proc
end
end
end

using HashAsFunction