如何创建一个采用整数i
的方法,并将List<T>
的成员从索引i
的当前位置移动到列表前面?
答案 0 :(得分:26)
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);
}
}
答案 1 :(得分:9)
到目前为止,3个答案中的任何一个都有诀窍,但我建议不要进行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;
}
}
答案 2 :(得分:4)
var l = new List<DataItem>();
var temp = l[index];
l.RemoveAt(index);
l.Insert(0, temp);
答案 3 :(得分:2)
试试这个
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++;
}
}
答案 4 :(得分:0)
冒着击败死马的风险:
LinkedList不适合这个吗? 虽然你会失去随机访问功能,但在List的开头插入元素会更简单(.AddFirst)并且效率更高。