我想知道是否可以从任何元素开始迭代所有数组元素,而无需对数组进行预排序。
更清楚的是假设我有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];
}
但我不知道是否有更好的。有什么建议吗?
答案 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语句,所以我会在这里留下我的答案。