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

发布于 2024-09-11 14:53:37 字数 512 浏览 2 评论 0原文

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

为了更清楚起见,假设我有 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];
}

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

I was wondering if is it possible to iterate trough all arrays elements starting from any of its elements without pre-sorting the array.

just to be clearer suppose i have the array of 5 elements:

0 1 2 3 4

i want to read all elements starting from one of their index like:

2 3 4 0 1

or

4 0 1 2 3

the idea is to keep the element order in this way:

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

One solution could be (pseudocode):

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

but I don't know if there's a better one. Any suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

昔日梦未散 2024-09-18 14:53:37

使用 运算符:

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

Use the modulus operator:

int start = 3;
for (int i = 0; i < count; i++)
{
    value = array[(start + i) % count];
}
跨年 2024-09-18 14:53:37

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

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 语句,因此我将在这里留下我的答案作为替代。

Yes it's possible. Try this:

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];
}

EDIT: When I first answered this I thought you were asking about picking the random index. I probably misunderstood. I also use the modulus operator to iterate arrays as in the first answer, and that's probably the more elegant approach. You can also use the if statement above, so I'll leave my answer here as an alternate.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文