Цикл проверки нескольких циклов с одной переменной - PullRequest
1 голос
/ 07 мая 2019

Мне интересно, есть ли способ проверить несколько условий цикла while, используя одну и ту же переменную. Это немного расплывчато, но этот пример должен прояснить ситуацию:

while (myFunction(x) == 0 || myFunction(x) == 13639 || myFunction(x) == -4261.9583)
{ x++; }

Можно ли оценивать myFunction (x) только один раз за цикл при проверке трех условий, чтобы функции не приходилось запускать три отдельных раза для одинакового результата каждый раз?

Я делаю это в целях оптимизации / эффективности. myFunction () может быть довольно трудоемкой функцией, поэтому я хочу, чтобы она выполнялась минимально необходимое количество раз.

Обычно я определяю значение myFunction (x) перед тем, как запустить цикл while, но в этом случае значение myFunction (x) будет изменяться по мере прохождения цикла через каждую итерацию, поскольку значение x будет меняться.

Ответы [ 3 ]

4 голосов
/ 07 мая 2019

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

double result;
while ((result = myFunction(x)) == 0 || result == 13639 || result == -4261.9583)
{ x++; }
2 голосов
/ 07 мая 2019

Три варианта:

Делать это задом наперед

Проверять список по результатам, а не проверять результат по списку.

var list = new float[] { 0F, 13639F, -4261.9583F );
while (list.Contains(myFunction(x))
{
    x++;
}

Написать функцию

Извлечение логики в другую функцию всегда является хорошим способом решения проблемы.

bool IsValid(float input)
{
    var result = myFunction(input);
    return (result == 0 || result == 13639 || result == -4261.9583);
}

while (IsValid(x))
{ 
    x++;
}

Использование while(true)

Когда условие цикла while является сложным,Обычный вариант - снять чек с () и вместо этого поставить его в {}.Когда вы сделаете это, используйте while (true).

while (true)
{
    var result = myFunction(x);
    if (result != 0 && result != 13639 && result != -4261.9583) break;
    x++;
}
1 голос
/ 07 мая 2019

Вы можете сделать это просто, переместив проверку в отдельный метод, который принимает возвращаемое значение функции в качестве параметра, а затем выполняет 3 проверки значения непосредственно и возвращает логическое значение соответственно.

Предполагая, что функция возвращает int введенное значение, это может выглядеть, например, примерно так:

bool CheckResultValue(int value) {
    return value == 0 || value == 13639 || value == -4261.9583;
}

Тогда ваш цикл while может выглядеть примерно так:

while (CheckResultValue(myFunction(x)))
{ x++; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...