如何在ruby中跳过外循环?

时间:2011-12-08 10:57:05

标签: ruby-on-rails ruby

  

可能重复:
  How to break outer cycle in Ruby?

array_1 = %W(http://www.abc.com www.xyz.com www.pqr.com)
array_2 = %W(www.abc.com www.exmple.com)
array_1.each do |a1|
  array_2.each do |a2|
    next if(a1.include?(a2))
  end
puts a1
end

我想跳过array_2中存在的那些条目。无论如何,如果条件满足,我可以跳过打印a1吗? Ruby没有像java这样的标签,我想跳过外循环。 :(

任何帮助都会很棒

5 个答案:

答案 0 :(得分:4)

你可以写:

array_1.each do |a1|
  next if array_2.any? { |a2| a1.include?(a2) }
  ...
end

答案 1 :(得分:1)

您可以将带有return语句的lambda传递给each方法而不是块。 Lambda函数将返回值,而不是包含lambda的方法。

array_1 = %W(http://www.abc.com www.xyz.com www.pqr.com)
array_2 = %W(www.abc.com www.exmple.com)
array_1.each(&lambda do |a1|
  array_2.each do |a2|
    return if(a1.include?(a2))
  end
  puts a1
end)

答案 2 :(得分:1)

不是试图模仿其他语言,而是可以做这样的事情:

array_1.product(array_2).each do |a1, a2|
  next if(a1.include?(a2))
end

或更多惯用语:

array_1.product(array_2).reject{ |a1, a2|
  a1.include?(a2)
}.each{ |a1, a2|
  # do something here
}

答案 3 :(得分:1)

[编辑]误读输入。这应该会更好。任何?方法退出搜索是否找到一个匹配。

array_1 = %W(http://www.abc.com www.xyz.com www.pqr.com)
array_2 = %W(www.abc.com www.exmple.com)

puts array_1.reject{|a1| array_2.any?{|a2| a1.include?(a2)} }

但是如果你坚持打破循环,那就是catchthrow

array_1.each do |a1|
  catch :its_in do
    array_2.each do |a2|
      throw :its_in if(a1.include?(a2))
    end
  puts a1
  end
end

答案 4 :(得分:0)

你可以使用while循环

这可能有效:

busy = true
while busy
  array1.each do |a1|
    array2.each do |a2|

       busy = false
    end
  end
end