2011-12-15 38 views
-2

我有一個循環的書面像這樣Simplyfying使用「:」有條件的經營者

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

正如你可以看到我現在用的是?運營商3的時間在環路初始化。

有什麼辦法可以簡化它嗎? 目前,CPU需要爲每次迭代計算最少2次額外決策和最多3次額外 。我正試圖減少這一點。

ps:我試圖避免使用if陳述。

目前我使用JavaScript作爲一種語言

+0

爲什麼要避免if語句? – 2011-12-15 07:38:14

+0

那麼我試圖使行數少這就是爲什麼 – Gautam 2011-12-15 07:38:57

+0

「我試圖使行數少」 - 爲什麼???除非你擺脫冗餘,否則這通常是一個壞主意。 – 2011-12-15 07:40:15

回答

2

您可以在循環的開始做的決定一次,並使用!=操作者用於比較:

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

演示:http://jsfiddle.net/Guffa/2Z369/

1

像循環體中形成你的邏輯:

// 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); 
}