将List的成员移动到List的前面

时间:2010-04-04 19:24:26

标签: c# .net

如何创建一个采用整数i的方法,并将List<T>的成员从索引i的当前位置移动到列表前面?

5 个答案:

答案 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)并且效率更高。