Как определить элемент по индексу в шаблоне - PullRequest
3 голосов
/ 21 мая 2010

У меня есть следующие элементы в списке / массиве

a1, a2, a3

и эти элементы используются для построения другого списка в предсказуемой схеме

пример

a1, a1, a2, a2, a3, a3, a1, a1, a2, a2, a3, a3 ...

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

так что другой шаблон может быть

a1, a1, a1, a2, a2, a2, a3, a3, a3, a1, a1, a1, a2, a2, a2, a3, a3, a3 ...

или

a1, a2, a3, a1, a2, a3

никогда не будет

a2, a2, a1, a1, a3, a3 ... или a1, a2, a3, a2, a3, a1 и т. Д.

Как определить, какой элемент находится в каком-либо индексе в списке?

Я не могу запустить созданный список, потому что это то, что может быть. Это на самом деле не существует. И мне нужно получить ответ для любого индекса от 0 до бесконечности (на самом деле integer.maxvalue)

Ответы [ 2 ]

4 голосов
/ 21 мая 2010

Давайте сделаем несколько обозначений:
n - количество элементов в оригинальном массиве
k - сколько раз элемент повторяется
х-индекс

Array [x] == Array [(x mod (k n)) div k] - это то, что вы искали.
Другими словами, элемент в индексе x равен элементу в индексе (x mod (k n)) div k

0 голосов
/ 21 мая 2010

Бегите по списку, пока не найдете элемент, который не совпадает с первым элементом. После этого вы знаете, какова длина каждой группы и можете определить элемент по любому индексу с помощью простого выражения по модулю.

псевдо материал:

determine(index){
  firstelement = list[0]
  i=0;
  for i=0; element.count; i++
    if element != firstelement
      break;
  m = index modulo (i*3)
  switch(m)
    case 0: return 'a1'
    case 1: return 'a2'
    case 2: return 'a3'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...