我有一個這樣的陣列:將一個數組的某些元素映射到Ruby中的另一個數組?
[1,2,3,2,4,5,3,7,8]
我想將它們映射到其它元件2> 'B',3 => '一個'
[1,'b','a','b',4,5,'a',7,8]
什麼一些策略做它。
我有一個這樣的陣列:將一個數組的某些元素映射到Ruby中的另一個數組?
[1,2,3,2,4,5,3,7,8]
我想將它們映射到其它元件2> 'B',3 => '一個'
[1,'b','a','b',4,5,'a',7,8]
什麼一些策略做它。
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]
這裏的另一種可能的解決方案,類似於@falsetru's answer:
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]
在Feature #11262 – Make more objects behave like "Functions"上Ruby問題跟蹤器,我建議Hash
ES應該像從鍵到值的函數那樣工作,即它們應該執行NT 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]
直到我的建議得到實施(這可能是「從不」,考慮到沒有人即使看着它2個月),你需要這個猴子補丁得到它的工作:
module HashAsFunction
refine Hash do
alias_method :call, :[]
def to_proc
method(:call).to_proc
end
end
end
using HashAsFunction
什麼 - >符號做 –
穆罕默德,這就是[「stabby」(http://isotope11.com/blog/stabby-lambda )語法來編寫lambda,這是在Ruby v1.9中引入的。正如你所看到的,我用方法[Hash#default_proc =](http://ruby-doc.org/core-2.2.0/Hash.html#method-i-default_proc-3D)。 –
我喜歡你把問題徹底解決的方式。 –