C# 如何从列表中删除多个条目而不超出范围?

C# 如何从列表中删除多个条目而不超出范围?,c#,C#,我有一个包含许多值(比如200)的整数列表 我是否必须对ExampleList中的Removes进行排序,或者是否有其他方法可以删除ExampleList中不必要的值 如果我必须排序,最简单的排序方法是什么?是否有任何内置的C#库/方法进行排序 如果RemoveFromExampleList是一个索引列表,则必须对其进行排序,并根据这些索引按降序进行删除。任何其他方式都会导致您删除不想删除的值。您的选择是排序,是的。按降序排列删除列表,然后按索引进行删除 // perform an orderb

我有一个包含许多值(比如200)的整数列表

我是否必须对ExampleList中的Removes进行排序,或者是否有其他方法可以删除ExampleList中不必要的值


如果我必须排序,最简单的排序方法是什么?是否有任何内置的C#库/方法进行排序

如果
RemoveFromExampleList
是一个索引列表,则必须对其进行排序,并根据这些索引按降序进行删除。任何其他方式都会导致您删除不想删除的值。

您的选择是排序,是的。按降序排列删除列表,然后按索引进行删除

// perform an orderby projection, remove
foreach (int index in RemoveFromExampleList.OrderByDescending(i => i)
    ExampleList.RemoveAt(index);


(假设没有重复项,如果没有,请在列表/投影上使用
.Distinct()

您可以将要删除的值替换为sentinel值,即您知道列表中没有出现的值,然后删除该值的所有出现项。

如果您确实不喜欢对列表进行排序,您可以将该列表设置为可为空整数的列表:

List<int?> ints;
List int;
然后,您可以将“delete list”中的值设置为null,并使用RemoveAll方法删除null值


但这显然是一个小问题。

您可以使用LINQ/Lambda这样做:

//从另一个列表中删除项目的示例 列表主列表=新列表(); 主列表。添加(1); 主列表。添加(1); 主列表。添加(2); 主列表。添加(3)

List itemsToRemove=new List();
itemsToRemove.Add(1);
itemsToRemove.Add(2);
itemsToRemove.Add(3);
List cleanList=新列表();
foreach(itemsToRemove中的int值)
{
masterList=masterList.Where(x=>x!=value.ToList();
}

这是一行

ExampleList.RemoveAll(x => RemoveFromExampleList.Contains(ExampleList.IndexOf(x)));

确切地排序就像从ExampleList.Sort()中移除
一样简单。如果您随后添加了
.Reverse()
,您可以通过列表
foreach
。谢谢……这很有效!我觉得很傻,因为我不知道List.Sort()的存在……哈哈。
// perform an orderby projection, remove
foreach (int index in RemoveFromExampleList.OrderByDescending(i => i)
    ExampleList.RemoveAt(index);
// actually sort the list, then remove
RemoveFromExampleList.Sort((a,b) => b.CompareTo(a));
foreach (int index in RemoveFromExampleList)
    ExampleList.RemoveAt(index);
List<int?> ints;
        List<int> itemsToRemove = new List<int>();
        itemsToRemove.Add(1);
        itemsToRemove.Add(2);
        itemsToRemove.Add(3);

        List<int> cleanList = new List<int>();
        foreach (int value in itemsToRemove)
        {
            masterList = masterList.Where(x => x != value).ToList();
        }
ExampleList.RemoveAll(x => RemoveFromExampleList.Contains(ExampleList.IndexOf(x)));