代码之家  ›  专栏  ›  技术社区  ›  Noya

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

  •  2
  • Noya  · 技术社区  · 14 年前

    我想知道是否有可能在不预先排序数组的情况下,从数组的任何元素开始遍历所有数组元素。

    为了更清楚,假设我有5个元素的数组:

    0 1 2 3 4

    我想从一个索引开始读取所有元素,比如:

    2 3 4 0 1

    4 0 1 2 3

    n,n+1,…,结束,开始,…,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 回复  |  直到 14 年前
        1
  •  15
  •   tzaman    14 年前

    使用 modulus

    int start = 3;
    for (int i = 0; i < count; i++)
    {
        value = array[(start + i) % count];
    }
    
        2
  •  0
  •   Rab    13 年前

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

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