Załóżmy, że mam kodu C poniżejjak pominąć kilka iteracji w pętli w 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
}
}
Jak przekonwertować do Ruby? Wiem, że możemy pominąć jedną iterację za pomocą next
, ale muszę pominąć kilka iteracji w zależności od wartości warunkowej i nie wiem, ile iteracji należy pominąć przed uruchomieniem?
Oto kod mam rzeczywiście działa na (jak wspomniano przez Coreyward):
szukam „linii prostej” w tablicy, że wartości różni się mniej niż 0,1 (mniej niż 0,1 będzie uważany za "linię prostą"). Zakres musi być dłuższy niż 50, aby można go było uznać za długą "linię". Po znalezieniu zakresu linii [a, b], chcę pominąć iteracje do górnego limitu b, aby nie zaczął się ponownie od a + 1, i zacznie znajdować nową "linię prostą" od 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
}
}
Byłoby o wiele bardziej przydatne, jeśli pod warunkiem, intencji, co próbujesz osiągnąć. W Enumeratorze jest kilka całkiem przydatnych metod, które pozwalają ci ustawić wartość następnej iteracji ('feed') i zobaczyć następną wartość (' peek'), a także możesz użyć pętli 'for' w Rubin. Jestem pewien, że istnieje lepszy sposób pisania tego, po prostu nie wiem, co próbuje zrobić. – coreyward
Będziesz indeksować koniec tablicy w C, prawdopodobnie chcesz zmienić powiązanie na 'arr.Length-50'. Wydaje się to być nieco zawiłym sposobem znalezienia serii 50 lub więcej, których wartości są z epsilon wartości początkowej. – dbenhur
Wydaje się, że zakładasz, że wartości przy większym indeksie nigdy nie są mniejsze niż wartości o niższym indeksie. Czy to prawda? – dbenhur