Перемещение элементов в списке
Объявляю следующий объект
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");