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这样的标签,我想跳过外循环。 :(
任何帮助都会很棒
答案 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)} }
但是如果你坚持打破循环,那就是catch
和throw
:
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