Цикл C # - разрыв против продолжения

Чтобы проверить, содержится ли в списке my_list массив, равный a, используйте

any((a == x).all() for x in my_list)
752
задан callisto 4 July 2012 в 12:50
поделиться

8 ответов

break выйдет из цикла полностью, continue будет всего пропуск текущее повторение.

, Например:

for (int i = 0; i < 10; i++) {
    if (i == 0) {
        break;
    }

    DoSomeThingWith(i);
}

повреждение заставит цикл выходить на первом повторении - DoSomeThingWith, никогда не будет выполняться. Это здесь:

for (int i = 0; i < 10; i++) {
    if(i == 0) {
        continue;
    }

    DoSomeThingWith(i);
}

не выполнится DoSomeThingWith для i = 0, но цикл будет продолжаться , и DoSomeThingWith будет выполняться для i = 1 к i = 9.

1425
ответ дан Michael Stum 4 July 2012 в 12:50
поделиться

Простой ответ:

Повреждение выходы цикл сразу.
Продолжаются , начинает обрабатывать следующий объект. (Если существует кто-либо путем перехода к строке оценки для/в то время как)

5
ответ дан Maltrap 4 July 2012 в 12:50
поделиться

Ruby, к сожалению, несколько отличается. PS: Моя память является немного туманной на этом так извинения, если я неправ

вместо, повреждают/продолжают, она имеет повреждение / следующий, которые ведут себя то же с точки зрения циклов

, Циклы (как все остальное) являются выражениями и "возвращают" последнюю вещь, которую они сделали. Большую часть времени получение возвращаемого значения от цикла бессмысленно, таким образом, все просто делают это

a = 5
while a < 10
    a + 1
end

, можно однако сделать это

a = 5
b = while a < 10
    a + 1
end # b is now 10

ОДНАКО, много кода Ruby 'эмулирует' цикл при помощи блока. Канонический пример

10.times do |x|
    puts x
end

, Поскольку людям намного более свойственно хотеть сделать вещи с результатом блока, это - то, где это становится грязным. повреждение средние разные вещи / следующие средние разные вещи в контексте блока.

повреждение выпрыгнет из кода, который названный блоком

следующий пропустит остальную часть кода в блоке и 'возвратит' то, что Вы определяете вызывающей стороне блока. Это не имеет никакого смысла без примеров.

def timesten
    10.times{ |t| puts yield t }
end


timesten do |x|
   x * 2
end
# will print
2
4
6
8 ... and so on


timesten do |x|
    break
    x * 2
end
# won't print anything. The break jumps out of the timesten function entirely, and the call to `puts` inside it gets skipped

timesten do |x|
    break 5
    x * 2
end
# This is the same as above. it's "returning" 5, but nobody is catching it. If you did a = timesten... then a would get assigned to 5

timesten do |x|
    next 5
    x * 2
end 
# this would print
5
5
5 ... and so on, because 'next 5' skips the 'x * 2' and 'returns' 5.

Так да. Ruby является потрясающим, но он имеет некоторые ужасные угловые случаи. Это - второе с конца, я видел в своих годах использования его:-)

5
ответ дан Orion Edwards 4 July 2012 в 12:50
поделиться

Существуют больше, чем несколько человек, которым не нравится break и continue. Последняя жалоба я занялся ими, была в [1 112] JavaScript: Хорошие Части Douglas Crockford. Но я нахожу, что иногда использование одного из них действительно упрощает вещи, особенно если Ваш язык не включает do-while или do-until стиль цикла.

я склонен использовать break в циклах, которые ищут список что-то. После того, как найденный, в продолжении нет никакого смысла, таким образом, Вы могли бы также выйти.

я использую continue при выполнении чего-то с большинством элементов списка, но все еще хочу перескочить через некоторых.

break оператор также пригождается при опросе относительно допустимого ответа от кого-то или чего-то. Вместо:

Ask a question
While the answer is invalid:
    Ask the question

Вы могли устранить некоторое дублирование и использование:

While True:
    Ask a question
    If the answer is valid:
        break

do-until цикл, который я упомянул прежде, является более изящным решением для той конкретной проблемы:

Do:
    Ask a question
    Until the answer is valid

Никакое дублирование и никакой break необходимый также.

19
ответ дан yukondude 4 July 2012 в 12:50
поделиться

break остановился бы foreach, цикл полностью, continue пропустит к следующему DataRow.

26
ответ дан Raktim Biswas 4 July 2012 в 12:50
поделиться

повреждение причины счетчик команд для выпрыгивания из объема самого внутреннего цикла

for(i = 0; i < 10; i++)
{
    if(i == 2)
        break;
}

Работы как это

for(i = 0; i < 10; i++)
{
    if(i == 2)
        goto BREAK;
}
BREAK:;

продолжаются переходы до конца цикла. В для цикла, продолжите переходы к инкрементному выражению.

for(i = 0; i < 10; i++)
{
    if(i == 2)
        continue;

    printf("%d", i);
}

Работы как это

for(i = 0; i < 10; i++)
{
    if(i == 2)
        goto CONTINUE;

    printf("%d", i);

    CONTINUE:;
}
97
ответ дан SemiColon 4 July 2012 в 12:50
поделиться

Действительно простой способ понять это состоит в том, чтобы поместить слово "цикл" после каждого из ключевых слов. Условия теперь имеют смысл, если они просто читаются как повседневные фразы.

break цикл - цикличное выполнение повреждается и останавливается.

continue цикл - цикл продолжает выполняться со следующим повторением.

377
ответ дан Raktim Biswas 4 July 2012 в 12:50
поделиться

Позвольте мне заявить очевидное: обратите внимание, что добавление ни повреждение, ни продолжается, возобновит Вашу программу; т.е. Я захватил для определенной ошибки, затем после входа его, я хотел продолжить обрабатывать, и было больше задач кода, промежуточных следующая строка, таким образом, я просто позволяю ему провалиться.

5
ответ дан 22 November 2019 в 21:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: