使用List.Move将项目移动到列表底部

时间:2016-06-08 16:49:22

标签: c# list

我有一个项目列表和一个“选定”列表(完整列表的一个子集)。我想实现一个将子列表项移动到完整列表底部的函数。

例如,如果我选择了元素2,4,&从列表0,1,2,3,4,5,6,7,8,9我希望这个函数得到最终结果0,1,3,5,7,8,9,2,4, 6

目前,我正在尝试使用类似的内容,但我不确定如何定义moveTo

public object MoveLoopToBottom()
{
    if (selectedLoops.Count < 1)
        return null;

    foreach (ProfilerLoop selected in selectedLoops)
    {
        int moveFrom = ClonedLoops.IndexOf(selected);
        int moveTo = ;

        ClonedLoops.Move(moveFrom, moveTo);
    }

    return null;
}

我就List.Move的工作方式咨询了这一点:Generic List - moving an item within the list但似乎无法“移至列表末尾”。 List.Move可以(最多)移动到“倒数第二”位置(尝试移动到列表的末尾会抛出“OutOfRange Exception”)。

而不是List.Move,我尝试List.Remove然后List.Add(或List.Add然后List.RemoveAt),但是调用List.Remove会让我遇到问题我的foreach循环迭代(List.Move没有)。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

如果我正确理解了这一点,那么您可以在不使用循环的情况下简单地删除和读取它们。

List<int> list = new List<int>(new int[] { 0,1,2,3,4,5,6,7,8,9 });
var selected  = new List<int>(new int[] { 0,1,2 });

list = list.Except(selected).ToList();
list.AddRange(selected);

这将从列表中删除所有选定的项目,然后将它们重新添加到底部。

DotNetFiddle

答案 1 :(得分:0)

实际上,这对我有用(我不确定为什么之前没有工作)。 @prospector的回答可能也非常有效(只是因为我的独特情况不起作用)

public object MoveLoopToBottom()
{
    if (selectedLoops.Count < 1)
        return null;

    foreach (ProfilerLoop selected in selectedLoops)
    {
        int moveFrom = PartLoops.IndexOf(selected);

        ClonedLoops.Move(moveFrom, PartLoops.Count - 1);
    }

    return null;
}