C# C删除元素并重新排序

C# C删除元素并重新排序,c#,C#,我有一个主要的收藏 List<int> main = Enumerable.Range(0,11).ToList(); 我有三个清单: List<int> a = new List<int>{main[0],main[1],main[5],main[3]}; //I delete this list with all its items from the main List<int> b = new List<int>{main[2]

我有一个主要的收藏

List<int> main = Enumerable.Range(0,11).ToList();
我有三个清单:

List<int> a = new List<int>{main[0],main[1],main[5],main[3]}; //I delete this list with all its items from the main
List<int> b = new List<int>{main[2],main[6],main[7]};
List<int> c = new List<int>{main[8],main[9],main[4],main[11],main[10]};
现在我想从主列表中删除0,1,5,3个项目,我完全删除了一个列表,因此我想更新b c项目

这意味着他们将成为:

List<int> main = new List<int> {0,1,2,4,5,6,7};

List<int> b = new List<int>{main[0],main[2],main[3]};
List<int> c = new List<int>{main[4],main[5],main[1],main[7],main[6]};
我是否需要某种映射,也许其他人以前也遇到过类似的问题

也许这个截图展示了我想做得更好的地方: 在此之后,我必须更新b和c集合

您可以使用Linq的Except函数

main = main.Except(a).ToList();

现在还不清楚您想要做什么,但是您可以使用LINQ惰性评估来实现类似的事情。您无法使用硬编码索引执行您想要执行的操作。您需要使用过滤器和LINQ方法

List<int> main = Enumerable.Range(0,11).ToList();

List<int> a = new List<int>{ 1, 5, 3, 0, 7};
IEnumerable<int> b = main.Where(i => i % 2 == 0);
IEnumerable<int> c = main.Where(i => i % 2 == 1);

foreach (var i in b)
{
    Console.Write(i + ","); // 0, 2, 4, 6, 8, 10
}
Console.WriteLine();

foreach (var i in c)
{
    Console.Write(i + ","); // 1, 3, 5, 7, 9
}
Console.WriteLine();


foreach (var i in a)
{
    main.Remove(i);
}

foreach (var i in b)
{
    Console.Write(i + ","); // 2, 4, 6, 8, 10
}
Console.WriteLine();

foreach (var i in c)
{
    Console.Write(i + ","); // 9
}
Console.WriteLine();

是否希望b和c在修改main时自动更新?如果是这样,则应将其设置为Func类型,而不是List类型。您可以通过main=main.Excepta.ToList从main中删除元素,但这样它将是一个全新的列表。如果要保留原始实例,则需要创建一个方法,该方法将索引从计数-1循环到0,如果索引位于a中,则将其删除。您能否提供一个完整的示例,其中包含删除项的代码?我不明白删除项目0、1、5、3后,主列表将包含数字0、1、2、4、5、6、7。我主要删除列表a,并且必须相应地更新带有c的b。@Meta Knight抱歉,这是一个键入错误。基本上,ABC列表依赖于一个集合,该集合是从0到项目总数的结果数。我想做的是删除一个列表,b c将相应地更新。没有一个BC有任何共享整数。@JamesFaix如果他使用Except分配一个新列表,或者使用Remove从原始实例中删除它们,会有什么区别?