如何将两个不同数组中的值映射为等效对象数组上的属性?
问题描述:
我有两个阵列:如何将两个不同数组中的值映射为等效对象数组上的属性?
a = [a1, ..., an]
b = [b1, ..., bn]
我想,其中对象具有字段a
和b
创建从这些阵列对象的阵列。因此,它看起来像:
o = [o1, ..., on]
其中o1.a = a1
和o1.b = b1
和o2.a = a2
和o2.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])
答
a.zip(b).map { |args| Obj.new(*args) }
根据您的编辑:
a.zip(b).map { |(a, b)| Obj.new(a, b) }
答
在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> ... ]
你可以只通过块的多个参数,以及数组会传递给它,扩展到这些参数,就像*args
或a, b = [1, 11]
会做的那样。