当达到两个表的大小的最小值时,如何在循环时退出

时间:2018-04-10 18:15:22

标签: ruby

我正在进行一些数据迁移,比较旧数据库和新数据库之间的表。我有一个循环,当两个数组的大小不同时会引发异常。

array1.zip(array2).each do |ar1, ar2|
  # some code here
end

我想知道当我们达到两个数组的相同大小时如何退出循环。

5 个答案:

答案 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