1

我有一个内部带有 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 < 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
4

2 回答 2

5

不使用for in,使用each

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

  if i == 10
    puts "YAY!"
  end
end
于 2013-03-28T07:07:42.307 回答
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"
于 2013-03-28T07:30:53.263 回答