假設我有以下如何跳過Ruby中的循環中的幾個迭代?
for(i = 0; i < 10; i++){
printf("Hello");
if(i == 5){
a[3] = a[2] * 2;
if(a[3] == b)
i = a[3]; //Skip to index = a[3]; depends on runtime value
}
}
如何轉換到Ruby的C代碼?我知道我們可以使用next
跳過一次迭代,但是我必須根據條件值跳過幾次迭代,並且我不知道在運行前要跳過多少次迭代?
這裏是我實際工作於(如由Coreyward提及)的代碼:我尋找陣列中「直線」的數值相差小於0.1(小於0.1將
視爲「直線」)。該範圍必須長於50才能被視爲長「線」。找到行範圍[a,b]後,我想跳過迭代到上限b,所以它不會再從+ 1開始,它會開始從b + 1中找到新的「直線」。
for(i=0; i<arr.Length; i++){
if(arr[i] - arr[i + 50] < 0.1){
m = i; //m is the starting point
for(j=i; j<arr.Length; j++){ //this loop makes sure all values differs less than 0.1
if(arr[i] - arr[j] < 0.1){
n = j;
}else{
break;
}
}
if(n - m > 50){ //Found a line with range greater than 50, and store the starting point to line array
line[i] = m
}
i = n //Start new search from n
}
}
這將是大有幫助,如果你提供你想要達到什麼目的。在Enumerator類中有一些非常方便的方法可以讓你設置下一次迭代的值('feed')並查看下一個值('peek'),並且你還可以使用for循環紅寶石。我確信有一個更清晰的寫作方式,我只是不知道它在做什麼。 – coreyward 2012-03-29 18:09:29
你要在C中索引數組的末尾,可能想要將邊界改爲'arr.Length-50'。這似乎是一個有點複雜的方式來找到50個或更多的價值與初始值的epsilon運行。 – dbenhur 2012-03-29 18:48:25
您似乎認爲較大指數的值永遠不會低於指數較低的值。這是真的? – dbenhur 2012-03-29 18:52:25