Rearranging elements - माणिक, सरणियाँ

उनके संकेत को संदर्भित करके किसी सरणी के तत्वों को पुनर्व्यवस्थित करने का सबसे आसान तरीका क्या है? कुछ इस तरह:

[:a, :b, :c, :d].rearrange(3, 1, 0, 2) # => [:d, :b, :a, :c]
[:a, :b, :c, :d].rearrange!(3, 1, 0, 2) # => [:d, :b, :a, :c]

उत्तर:

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

खैर, रूबी के पास पहले से ही यह विधि है, केवल यह कि इसे कहा जाता है values_at:

>> [:a, :b, :c, :d].values_at(3, 1, 0, 2)
=> [:d, :b, :a, :c]

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

मैं इसे एक बिट के चारों ओर मोड़ देता हूं। एक एकल क्रमचय केवल एक फ़ंक्शन है जो किसी अन्य ऐरे के लिए एक सरणी को मैप करता है ताकि ऐसा प्रतीत हो:

a = [:a, :b, :c, :d]
permuted = [3, 1, 0, 2].map { |i| a[i] }

यदि आवश्यक हो तो ऐरे में बंदर पैच करने के लिए आसान है:

class Array
def permute(*p)
p.map { |i| self[i] }
end
end

त्रुटि की जांच कर रहा है, permute!, और आगे की बारीकियों को एक अभ्यास के रूप में छोड़ दिया जाता है।