Ruby停止并转到for循环的下一次迭代

时间:2013-03-28 07:05:01

标签: ruby loops for-loop escaping iteration

我有一个带有if elsif语句的for循环。在第一个if,如果条件满足,我希望它停在那里并继续循环的下一次迭代。

这是我想要做的非常简化的版本:

array = [1,2,3,4,"x"]
for i in 0..(array.count -1)
    if array[i] == "x"
        #start next for loop iteration without executing the elsif
    elsif array[i] < 3
        puts "YAY!"
    end
end

我正在尝试做的是遍历一个数组,其中除了一个元素之外的所有元素都是整数,但其中一个是一个字符串。在字符串元素上,我需要循环(无论哪种类型最好)跳过其余代码并转到循环的下一次迭代。这很重要,因为第二个if语句使用'array_element&lt; 11条件'所以,如果它在字符串元素上运行,我得到“字符串与11的比较失败”

所以我想要arr [x] [3]这就是我尝试的但是它给了我8 8 8 8而不是8。

arr = [[1,2,3,"4"], [5,6,7,8], [9,10,11,12]] 

    arr.each{|x| 
    x.each {|i| 
        next if x[3].instance_of? String 
        if x[3] < 12 puts x[3] 
        end 
} 
}

好的,这有效!!谢谢你iAmRubuuu !!

arr = [1,2,3,"4"], [5,6,7,8], [9,10,11,12], [13,14,15,"16"], [17,18,19,20]]

arr.each_with_index{|x, i| 

    next if x.last.instance_of? String

    if x.last < 21
    puts x.last
    end
}

给我输出

8
12
20

2 个答案:

答案 0 :(得分:5)

请勿使用for in,请使用each

(0..10).each do |i|
  next if i == 5

  if i == 10
    puts "YAY!"
  end
end

答案 1 :(得分:2)

根据您的编辑,希望您正在寻找以下内容:

arr = [1, 2, 3, "11", 11]
arr.each do |x|
  next if x.instance_of? String
  puts "#{x} is #{x.class}"
end

输出:

1 is Fixnum
2 is Fixnum
3 is Fixnum
11 is Fixnum

修改

代码:

arr = [[1,2,3,"4"], [4,5,6,7], [8,9,10,11]] 

arr.each{|x|
x.each{ |i|
next if i.instance_of? String
puts "#{i} is #{i.class}"
}
}

输出:

1 is Fixnum
2 is Fixnum
3 is Fixnum
4 is Fixnum
5 is Fixnum
6 is Fixnum
7 is Fixnum
8 is Fixnum
9 is Fixnum
10 is Fixnum
11 is Fixnum

V_1(来自我在回答帖子中的第一条评论)

arr = [[1,2,3,"4"], [4,5,6,7], [8,9,10,11]] 
puts arr[1].last,arr.last.last

输出:

7
11

V_2(来自我在回复帖子中的第一条评论)

arr = [[1,2,3,"4"], [4,5,6,7], [8,9,10,11]] 
arr.each_with_index{ |x,i|
next if i == 0
#p x,i
p "last element of inner array:#{x.last}"
}

输出:

"last element of inner array:7"
"last element of inner array:11"