Самый эффективный бесконечный цикл в 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];
}