2013-04-30 56 views
3

我有两个阵列:如何将两个不同数组中的值映射为等效对象数组上的属性?

a = [a1, ..., an] 
b = [b1, ..., bn] 

我想,其中对象具有字段ab创建从这些阵列对象的阵列。因此,它看起来像:

o = [o1, ..., on] 

其中o1.a = a1o1.b = b1o2.a = a2o2.b = b2等。

现在,我有:

Obj = Struct.new(:a, :b) 
a = [1, 2, 3, 4] 
b = [5, 6, 7, 8] 
objs = [] 
// Is there a better way of doing the following or is it okay? 
a.zip(b).each do |ai| 
    objs << Obj.new(ai[0], ai[1]) 

回答

4
a.zip(b).map { |args| Obj.new(*args) } 

根据您的编辑:

a.zip(b).map { |(a, b)| Obj.new(a, b) } 
3

在Ruby 1.9,以下工作:

a = (1..10).to_a 
b = (11..20).to_a 
o = Struct.new(:a, :b) 

a.zip(b).map {|x, y| o.new(x, y) } 

# => [#<struct a=1, b=11>, #<struct a=2, b=12> ... ] 

你可以只通过块的多个参数,以及数组会传递给它,扩展到这些参数,就像*argsa, b = [1, 11]会做的那样。

相关问题