我正在尝试为每个人分配一个相同大小的列表中的年龄值。
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
答案 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)] }
P.S。我会使用 @ardavis 引入的方法,只使用zip
:
a.zip(b) { |a, b| a.age = b }