我目前做的做到这一点:@ users.each do | user | ---有没有办法来对多个对象
@users.each do |user|
鉴于我有@users,@用户1,@ users2
有没有办法做到:
[@users, @users1, @users2].each do |user|
让每个循环遍历所有对象?
感谢
我目前做的做到这一点:@ users.each do | user | ---有没有办法来对多个对象
@users.each do |user|
鉴于我有@users,@用户1,@ users2
有没有办法做到:
[@users, @users1, @users2].each do |user|
让每个循环遍历所有对象?
感谢
您可以连接阵列和迭代结果:
(@users + @users1 + @users2).each do |user|
...
end
它可能是很有诱惑力的使用扁平化,但你应该小心。一个简单的无参数flatten
通话不行为您预期的方式,如果任何阵列中的任何元素阵列本身:
users, users1, users2 = [1,2], [ [3,4], [5,6] ], [ 7,8]
puts [users,users1,users2].flatten.inspect
# Will print [1, 2, 3, 4, 5, 6, 7, 8]
# Two small arrays are smashed!!!
然而,随着jleedev表明在一个评论,在Ruby中flatten
功能可以接受整数参数定义阵列将被打碎为最大电平,所以:
puts [users,users1,users2].flatten(1).inspect
# Will print [1, 2, [3, 4], [5, 6], 7, 8]
# Just as planned.
[@users,@users1,@users2].flatten.each do |user|
如果这三个数组中的任何一个元素都是数组本身,这将无法按预期工作。 – 2011-05-08 19:45:33
@Pavel技术上是正确的,但不太可能给出阵列的名称 – Phrogz 2011-05-08 19:46:12
'.flatten(1)'只能展平一个级别。 – 2011-05-08 19:49:07
的各种技术:
# Concatenate
(@[email protected][email protected]).each{ ... }
# Splat (Ruby 1.9 only)
[*@users,*@users1,*@users2].each{ ... }
# Interleave them
@users.zip(@users1, @users2).each{ |u,u1,u2| ... }
为什么你首先有'@ users','@ users1'和'@ users2'? – 2011-05-08 23:31:17