我有一个项目列表和一个“选定”列表(完整列表的一个子集)。我想实现一个将子列表项移动到完整列表底部的函数。
例如,如果我选择了元素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
没有)。
有什么建议吗?
答案 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);
这将从列表中删除所有选定的项目,然后将它们重新添加到底部。
答案 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;
}