2016-11-22 4 views
0

多くの場合、数値を "ループ"させる必要がある状況に遭遇します。つまり、値Xが与えられたら、ポイントまでインクリメントしてからゼロにループバックする必要があります。これは、通常、いくつかのかなり冗長なコードに多くの「プラス1」をもたらします。これを行うには、素敵な1ライナーや他の素敵なイディオムがありますか?"値をインクリメントする数値"のプログラミングイディオム

例(容易にするために使用JSカルーセル):

function cycle() { 

    const $e = $('.a-carousel'); 
    const activeClass = 'active'; 

    var activeIndex = $e.find('.' + activeClass).removeClass(activeClass).index(); 
    if (activeIndex + 1 >= $e.children().length) { 
     activeIndex = -1; 
    } 

    $e.children().eq(activeIndex + 1).addClass(activeClass); 

} 

答えて

1
一般に

、値の環状後継KI範囲内K 、...、kn -1は、

次(KI)=(KIからK + 1)MOD N + K

たとえば、

range = 3 ... 9 
k0 = 3 
n = 7 

k k-k0 k-k0+1 k-k0+1 mod n k-k0+1 mod n + k0 
------------------------------------------------------------ 
6  3  4   4   7 
7  4  5   5   8 
8  5  6   6   9 
9  6  7   0   3 
3  0  1   1   4 
4  1  2   2   5 
5  2  3   3   6 
0

このための特別な用語があるかどうかは分かりませんが、あなたのコードは、それが必要以上に多くの冗長です。あなたは1つのインクリメントと1つのifチェックでそれを行うことができます。

(擬似コードで)

x = MinValue 
Loop 
    Increment x 
    If x > MaxValue 
     x = MinValue 
    Do things with x 
関連する問題