как перебрать все элементы массива, начиная со случайного индекса - PullRequest
2 голосов
/ 29 июля 2010

Мне было интересно, возможно ли выполнить итерацию по всем элементам массива, начиная с любого из его элементов, без предварительной сортировки массива.

просто для ясности предположим, что у меня есть массив из 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 ]

13 голосов
/ 29 июля 2010

Используйте оператор модуль :

int start = 3;
for (int i = 0; i < count; i++)
{
    value = array[(start + i) % count];
}
0 голосов
/ 29 июля 2010

Да, это возможно.Попробуйте это:

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, поэтому я оставлю здесь свой ответ в качестве альтернативы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...