Перемещение элементов в списке

Объявляю следующий объект

List<string> list = {"Kate", "John", "Paul", "Eve", "Hugo"};

Я хотел бы переместить "Еву" перед моим списком? Как мне это сделать. Я не должен переупорядочивать другие элементы!
На выходе я хочу получить этот

"Eve", "Kate", "John", "Paul", "Hugo"

Ответ 1

list.Remove("Eve");  // Removes the first "Eve" element in the list
list.Insert(0, "Eve");  // Inserts "Eve" at the first position in the list

Однако, если ваш список содержит несколько "Eve" , вызов Remove ( "Eve" ) удалит только первое вхождение "Eve" .

И вы должны знать, что вставка элемента в начале списка - дорогостоящая операция. Поскольку все элементы, находящиеся в списке, должны быть сдвинуты.

UPDATE

Как заметил @AlvinWong, LinkedList<string> - очень хорошее решение, чтобы избежать этих накладных расходов при вставке элемента. Операция Insert выполняется в O (1) (O (n-i) в List). Основным недостатком LinkedList<string> является то, что доступ к элементу i th является операцией в O (i) (O (1) в List).

Ответ 2

Вы можете удалить и вставить его в первый индекс.

List<string> list = new List<string>(){ "Kate", "John", "Paul", "Eve", "Hugo" };
list.Remove("Eve");
list.Insert(0, "Eve");
foreach (var i in list)
{
   Console.WriteLine(i);
}

Если вы знаете свой индекс "Eve", его можно удалить с помощью метода List.RemoveAt().

Вот DEMO.

Ответ 3

Вы можете использовать List.RemoveAt (чтобы вы не удалили все Eve's) и List.Insert.

Ответ 4

Вы можете использовать метод RemoveAt для удаления Eve из данного индекса и использовать Insert для добавления Eve в начало списка.

Ответ 5

list.Remove("Eve");
list.Insert(0, "Eve");