Перемещение члена списка в начало списка
Как создать метод, который принимает целое число 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) и намного более эффективной.