2011-05-08 95 views

回答

10

您可以连接阵列和迭代结果:

(@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. 
3
[@users,@users1,@users2].flatten.each do |user| 
+0

如果这三个数组中的任何一个元素都是数组本身,这将无法按预期工作。 – 2011-05-08 19:45:33

+0

@Pavel技术上是正确的,但不太可能给出阵列的名称 – Phrogz 2011-05-08 19:46:12

+6

'.flatten(1)'只能展平一个级别。 – 2011-05-08 19:49:07

3

的各种技术:

# 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| ... } 
+0

最后一个太hacky :) – fl00r 2011-05-08 19:56:00

+0

我在类似的情况下,推崇第二个。 – sawa 2011-05-08 20:33:59

+0

@ fl00r嗯,这取决于你是否需要这个功能,我想。 – Phrogz 2011-05-09 03:55:46

相关问题