Самый эффективный бесконечный цикл в C# (карусель)

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

Мне нужен идентификатор предыдущего и идентификатор следующего, так как он будет использоваться для заполнения кнопок "Следующая" и "Предыдущая" на веб-странице.

Я знаю, что могу перебирать их, добавляя заполнители для _next и _prev id, но каков наиболее эффективный способ сделать это?

Я считаю, что мой объект должен выглядеть следующим образом:

class Item {
    public int Id { get; set; }
    public string ItemName { get; set; }
    public int Next { get; set; }
    public int Prev { get; set; }
}

ТАК если у меня есть List<Item> items Как я могу наиболее эффективно добавить предыдущий и следующий идентификаторы для каждого элемента?

    int _prev = items.LastOrDefault().id;
    int _next = items.Count > 1 ? items[1].id : _prev;
    foreach (var i in items) {
        i.prev = _prev;
        i.next = (_next < 
        _prev = i.id;
        //_next = ???
    }

Я думаю, что я смотрю на этот неправильный путь. Есть ли лучший способ сделать это?

2 ответа

Решение

Если вы не хотите использовать LinkedList и хотите использовать индексы вместо foreach, как предложил Марк Гравел:

int count = items.Length;
for(int index = 0; index < count; index ++)
{
  item.Next = items[(index + 1) % count];
  item.Prev = items[(index - 1 + count) % count];
}

Используйте LinkedList для хранения ваших объектов.

Другие вопросы по тегам