Search code examples
c#asp.netfor-loopcarouselinfinite-carousel

Most efficient endless loop in C# (carousel)


Assuming a list of objects, each with an ID, what's the most efficient way of building a carousel, so that each object knows what its previous and next item is. The Last Item's previousId will link to the first item. The first item's previousId will link to the last.

I need the ID of the previous and the ID of the next, as this will be used to populate next and previous buttons on a web page.

I know I could iterate over them, adding placeholders for _next and _prev id, but what's the most efficient way to do this?

I figure my object should look like this:

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

SO, if I have a List<Item> items how can I most efficiently add the previous and next IDs to each item?

    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 = ???
    }

I think I'm looking at this wrong way. Is there a better way of doing this?


Solution

  • If you don't want to use LinkedList and willing to use indexes instead of foreach as Marc Gravel suggested:

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