Перемещение члена списка в начало списка

Как создать метод, который принимает целое число i, и переместить элемент List<T> в индекс i из его текущей позиции в начало списка?

Ответы

Ответ 1

Класс List <t> не предлагает такой метод, но вы можете написать метод расширения, который получает элемент, удаляет его и, наконец, повторно вставляет его:

static class ListExtensions
{
    static void MoveItemAtIndexToFront<T>(this List<T> list, int index)
    {
        T item = list[index];
        list.RemoveAt(index);
        list.Insert(0, item);
    }
}

Ответ 2

Любой из трех ответов до сих пор делает трюк, но вместо выполнения операции RemoveAt и Insert я предлагаю перемещать каждый элемент в одном месте справа от желаемых позиций слева до начала списка. Таким образом, вы не перемещаете предметы, расположенные справа от перемещенного предмета.

Это модификация ответа @dtb.

static class ListExtensions
{
    static void MoveItemAtIndexToFront<T>(this List<T> list, int index)
    {
        T item = list[index];
        for (int i = index; i > 0; i--)
            list[i] = list[i - 1];
        list[0] = item;
    }
}

Ответ 3

var l = new List<DataItem>();
var temp = l[index];
l.RemoveAt(index);
l.Insert(0, temp);

Ответ 4

Попробуйте это

    static List<int> idList = new List<int>() { 1, 2, 4, 5, 6, 8, 9 };

    private static void moveListItem(int index)
    {
        int getIndex = 0;

        foreach (int item in idList)
        {
            Console.WriteLine(" Before Id List Value - {0} ,Index - {1} ", item.ToString(), getIndex);
            getIndex++;
        }

        int value = idList[index];
        idList.RemoveAt(index);
        idList.Insert(0, value);

        Console.WriteLine();

        getIndex = 0;
        foreach (int item in idList)
        {
            Console.WriteLine(" After Id List Value - {0} ,Index - {1} ", item.ToString(), getIndex);
            getIndex++;
        }
    }

Ответ 5

В риске избиения мертвой лошади:

Разве LinkedList больше не подходит для этого? Хотя вы потеряете функциональность произвольного доступа, вставка элементов в начале списка будет намного проще (.AddFirst) и намного более эффективной.