我正在进行一些数据迁移,比较旧数据库和新数据库之间的表。我有一个循环,当两个数组的大小不同时会引发异常。
array1.zip(array2).each do |ar1, ar2|
# some code here
end
我想知道当我们达到两个数组的相同大小时如何退出循环。
答案 0 :(得分:3)
当到达第一个压缩数组的最后一个元素时,循环中断。
array1 = ['a', 'b', 'c', 'd']
array2 = ['x', 'y', 'z']
array1.zip(array2).each do |ar1, ar2|
puts "#{ar1} -- #{ar2}"
end
puts "-"*10
array2.zip(array1).each do |ar2, ar1|
puts "#{ar1} -- #{ar2}"
end
如果第一个数组更大,你可以交换变量:
array1, array2 = array2, array1 if array1.size > array2.size
array1.zip(array2).each do |ar1, ar2|
puts "#{ar1} -- #{ar2}"
end
如果您只是想检查数据是否相同而不想跟踪数据来源。
答案 1 :(得分:2)
set PATH=%PATH%;C:\Users\Administrator\AppData\Roaming\npm;C:\Users\Administrator\AppData\Roaming\npm\node_modules\@angular\cli\bin;
@echo on
cmd /c npm install -g @angular/cli@latest
echo yarn Install
cmd /c yarn
echo Build
ng build --prod --aot=true
答案 2 :(得分:1)
给定数组:
a = %w[ 1 2 3 10 ]
b = %w[ 1 4 5 1 ]
c = %w[ 5 4 3 ]
如果要比较两个数组的长度:
a.length == b.length
# => true
a.length == c.length
# => false
如果要比较 中的元素,那么数组的长度和的长度相同,那么数组的长度相同:
def equal_size_elements(a, b)
return false unless a.length == b.length
a.zip(b).all? do |_a, _b|
_a.length == _b.length
end
end
在那里检查所有元素是否具有不同的长度,因为如果它们都匹配则那么它是好的,否则不好。一旦发现不匹配,该方法将暂停迭代,因为此时它们不能全部通过。
答案 3 :(得分:0)
我找到了一个解决方案,也许比我的更好,我只是红宝石的初学者:
j = 0
array1.zip(array2).each do |ar1, ar2|
j += 1
break if [array1.size,array2.size].min == j
....
end
答案 4 :(得分:0)
比你的解决方案好一点:
array1.zip(array2).each_with_index do |zipped, index|
break if index == [array1.size, array2.size].min
puts zipped.first
puts zipped.last
puts
end