如何从随机索引开始迭代所有数组元素

时间:2010-07-29 15:23:10

标签: arrays iteration design-patterns

我想知道是否可以从任何元素开始迭代所有数组元素,而无需对数组进行预排序。

更清楚的是假设我有5个元素的数组:

0 1 2 3 4

我想从他们的索引之一开始读取所有元素,如:

2 3 4 0 1

4 0 1 2 3

这个想法是以这种方式保持元素顺序:

n,n + 1,...,end,start,...,n-1

一种解决方案可能是(伪代码):

int startElement;
int value;
for(startElement;startElement<array.count;startElement++){
  value = array[startElement];
}
for(int n = 0; n<startElement;n++){
  value = array[n];
}

但我不知道是否有更好的。有什么建议吗?

2 个答案:

答案 0 :(得分:13)

使用modulus运算符:

int start = 3;
for (int i = 0; i < count; i++)
{
    value = array[(start + i) % count];
}

答案 1 :(得分:0)

是的,这是可能的。试试这个:

int index = arc4rand() % count; // picks an index 0 to 4 if count is 5
// iterate through total number of elements in array
for (int i = 0; i < count; i++)
{
    // if element 4 go back to zero
    if (index == count-1) { index = 0; }
    //do something here
    someValue = yourArray[index];
}
编辑:当我第一次回答这个问题时,我以为你问的是选择随机索引。我可能误会了。我也使用模运算符来迭代数组,如第一个答案,这可能是更优雅的方法。你也可以使用上面的if语句,所以我会在这里留下我的答案。