【问题标题】:Move item to bottom of list using List.Move使用 List.Move 将项目移动到列表底部
【发布时间】:2016-06-08 16:49:22
【问题描述】:

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

例如,如果我从列表 0、1、2、3、4、5、6、7、8、9 中选择了元素 2、4 和 6,我希望此函数的最终结果为 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没有) .

有什么建议吗?

【问题讨论】:

  • 创建所选项目的新列表,从原始列表中删除它们,然后将它们添加到末尾,例如 var newList = originalList.Except(selectedItems).AddRange(selectedItems);
  • @stuartd 在Except 之后添加ToList()(因为AddRange 方法存在于List&lt;T&gt; 而不是IEnumerable&lt;T&gt;)。
  • list = list.OrderBy(i =&gt; selectedList.IndexOf(i)).ToList(); 怎么样?这会将不在selectedList 中的所有内容放在第一位,因为IndexOf 将是-1,然后是其他所有内容,按照它出现在selectedList 中的顺序。
  • ClonedLoops 是通用列表吗?即List&lt;T&gt;?

标签: c# list


【解决方案1】:

如果我理解正确,那么您可以简单地删除并读取它们,而无需使用循环。

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

【讨论】:

    【解决方案2】:

    实际上,这对我有用(我不确定为什么它以前不起作用)。 @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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-26
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 2017-10-13
      • 2018-04-25
      • 1970-01-01
      相关资源
      最近更新 更多