Простое использование условного оператора '?:' - PullRequest
0 голосов
/ 15 декабря 2011

У меня есть цикл, написанный так

for( i = (count>=0)?1:-1;(count>=0)?i<=count:i>=count;(count>=0)?i++:i--){
           do_something_with( i )
        }

Как видите, я использую оператор ? 3 раза в инициализации цикла.

Есть ли способ упростить это? В настоящее время процессор должен вычислить минимум 2 дополнительных решения и максимум 3 дополнительных для каждой итерации. Я пытаюсь уменьшить это.

Ps: я стараюсь избегать использования if операторов.

В настоящее время я использую javascript в качестве языка

Ответы [ 2 ]

2 голосов
/ 15 декабря 2011

Вы можете принять решение один раз в начале цикла и использовать для сравнения оператор !=:

for (var dir = count >= 0 ? 1 : -1, i = dir; i != count + dir; i += dir){
  do_something_with(i);
}

Демонстрация: http://jsfiddle.net/Guffa/2Z369/

1 голос
/ 15 декабря 2011

Формируйте свою логику в теле цикла, как:

// reverse count if required
int fixedCount = count >= 0 ? count : 0 - count;
for (i = 1; i <= fixedCount; i++)
{
    // reverse i if required
    int fixedIndex = count >= 0 ? i : 0 - i;

    do_something(fixedIndex);
}
...