分别使用另一个数组中的值为每个数组元素属性分配

时间:2017-10-28 21:27:05

标签: ruby-on-rails arrays ruby

我正在尝试为每个人分配一个相同大小的列表中的年龄值。

class Person
 attr_accessor :age
end

a = [person1, person2, person3, person4, person5]
b = [1,2,3,4,5]

如何使用简洁的方式(不使用索引i)进行以下分配?

i = 0
a.each do |p|
  p.age = b[i]
  i += 1
end

2 个答案:

答案 0 :(得分:4)

如果保证长度相同,则可以使用zip

a.zip(b).each do |p, age|
  p.age = age
end

正如@ardavis所指出的那样,zip会占用一个区块,因此您可以移除.each

我知道你要求一个没有索引的解决方案,但请注意,即使使用索引,你的代码也可以更整洁。在Ruby中,您不需要定义和增加自己的索引。相反,你可以这样使用with_index

a.each.with_index do |p, i|
  p.age = b[i]
end

答案 1 :(得分:1)

您可以使用index(因为每个Person实例都是唯一的):

a.each { |ai| ai.age = b[a.index(ai)] }

Demonstration

P.S。我会使用 @ardavis 引入的方法,只使用zip

a.zip(b) { |a, b| a.age = b }