在列表中的两个值之间进行迭代的好方法?

时间:2014-04-30 15:45:39

标签: java list mapping

我想检查从CONST到X的列表中的元素,其中CONST可以被视为中点,而X可以是从0到列表长度的任何数字。

我首先想到的是:

if(x>CONST) {
    for(int i=CONST; i<=x; i++){
        // Code here.
    }
} else {
    for(int i=CONST; i>=x; i--){
        // Code here.
    }
}

但我发现这有点难看。

有没有一种好方法可以在不使用if语句检查X是否大于/小于CONST的情况下执行此操作?

3 个答案:

答案 0 :(得分:1)

您可以将迭代分解为静态函数。虽然不如i ++或i那么高效。

static int it(int i, int CONST, int X) { return X-CONST >= 0 ? i+1 : i-1; }

for(int i = CONST; i != X; i = it(i,CONST,X) ) { ... }

答案 1 :(得分:0)

您可以使用三元运算符在for循环中创建if语句,但这可能更难以理解。

for(int i=CONST; x>CONST ? i<=x : i>=x; i += x>CONST ? 1 : -1) {

} 

答案 2 :(得分:0)

您可以尝试以下

int high = x>CONST?x:CONST; //sets the upper bound
int low  = x<CONST?x:CONST; //sets the lower bound
for(int i=low; i<=high; i++){
    ...
}

这取决于您是否关心迭代列表的顺序。

这是一个不同的版本,从const开始并转到x。

int inc = x<CONST?-1:1;
for(int i=CONST; i!=x + inc; i+=inc){
    ...
}