Самый эффективный бесконечный цикл в C # (карусель) - PullRequest
1 голос
/ 19 января 2011

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

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

Я знаю, что мог бы перебирать их, добавляя заполнители для _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 ]

3 голосов
/ 19 января 2011

Если вы не хотите использовать 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];
}
3 голосов
/ 19 января 2011

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

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