簡體   English   中英

使用List.Move將項目移到列表底部

[英]Move item to bottom of list using List.Move

我有一個項目列表和一個“選定”列表(完整列表的子集)。 我想實現一個功能,將子列表項移到完整列表的底部。

例如,如果我從列表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工作方式: 通用列表-在列表中移動項目,但似乎無法“移動到列表末尾”。 List.Move可以(最多)移動到“倒數第二個”位置(嘗試移動到列表的末尾會引發“ OutOfRange Exception”)。

而不是List.Move ,我嘗試做List.Remove然后List.Add (或List.Add然后List.RemoveAt ),但調用List.Remove給我的foreach循環迭代帶來了問題(而List.Move沒有)。

有什么建議么?

如果我正確地理解了這一點,那么您可以簡單地刪除它們並閱讀它們,而無需使用循環。

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

實際上,這對我有用(我不確定為什么以前不起作用)。 @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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM