有没有办法随机使用zip
method?
如果这是我的代码
['top', 'left', 'z-index'].zip(['5px', '35px', '10']).each do |attribute, value|
#not the actual code, just an example
puts "#{attribute} is #{value}"
end
它将始终以相同的顺序打印:
顶部是5px
左边是35px
z-index是10
如果我shuffle
数组,则元素将不匹配,因此它可能会打印
左边是5px
依旧......
我想要实现的是这一点,因为我在我的RSpec
测试中使用它
第一次运行
顶部是5px
左边是35px
z-index是10
第二次运行
左边是35px
顶部是5px
z-index是10
等
答案 0 :(得分:3)
如果您在shuffle
之后应用zip
该怎么办?
['top', 'left', 'z-index'].zip(['5px', '35px', '10']).shuffle.each do |attribute, value|
#not the actual code, just an example
puts "#{attribute} is #{value}"
end
每次运行时,您都会获得不同的输出。有时这个:
z-index is 10
left is 35px
top is 5px
有时这个:
left is 35px
z-index is 10
top is 5px
有时候那些相同的3行的其他排列
答案 1 :(得分:2)
您是否需要随机随机播放,请参阅@ user12341234提供的答案
是否要测试所有排列,请使用:
['top', 'left', 'z-index'].zip(['5px', '35px', '10'])
.permutation(3)
.each do |properties|
properties.each do |attribute, value|
#not the actual code, just an example
puts "#{attribute} is #{value}"
end
end
有关Array#permutation
的更多信息。
答案 2 :(得分:1)
为什么使用Enumerable#zip创建中间数组?如果
a = ['top', 'left', 'z-index']
b = ['5px', '35px', '10']
编写更简单,更有效:
a.each_index.to_a.shuffle.each { |idx| puts "%s is %s" % [a[idx], b[idx]] }
打印
z-index is 10
left is 35px
top is 5px
再次运行它可能会打印
top is 5px
z-index is 10
left is 35px