【发布时间】: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<T>而不是IEnumerable<T>)。 -
list = list.OrderBy(i => selectedList.IndexOf(i)).ToList();怎么样?这会将不在selectedList中的所有内容放在第一位,因为IndexOf将是-1,然后是其他所有内容,按照它出现在selectedList中的顺序。 -
ClonedLoops是通用列表吗?即List<T>?