C# 将列表添加到另一个列表时,如果出现重复索引,如何添加计数?

C# 将列表添加到另一个列表时,如果出现重复索引,如何添加计数?,c#,linq,C#,Linq,将列表添加到另一个列表时,如果出现重复索引,如何添加计数 这是怪物课 public class Monster { public int Index { get; set; } public string Name { get; set; } public int Count { get; set; } public Monster(int index, string name, int count) { Index

将列表添加到另一个列表时,如果出现重复索引,如何添加计数

这是怪物课

public class Monster
{
     public int Index { get; set; }
     public string Name { get; set; }
     public int Count { get; set; }

     public Monster(int index, string name, int count)
      {
            Index = index;
            Name = name;
            Count = count;
      }
}

List<Monster> listA = new List<Monster>();
List<Monster> listB = new List<Monster>();
List<Monster> listC = new List<Monster>();



/* Added some monsters in list A, B, C 
 And union (add range ) all A, B list to list A */

Linq中是否有解决此问题的方法?

如果我理解正确,您可以尝试使用Linq
Union
组合这些集合,然后使用
GroupBy
Sum
获得您的预期结果

List<Monster> listA = new List<Monster>();

listA.Add(new Monster(0, "snails", 600));
listA.Add(new Monster(1, "slimes", 300));

List<Monster> listB = new List<Monster>();
listB.Add(new Monster(0, "snails", 72));

List<Monster> listC = new List<Monster>();
listC.Add(new Monster(0, "snails", 300));
listC.Add(new Monster(1, "slimes", 371));
listC.Add(new Monster(10, "trolls", 152));

var reuslt =  listA
        .Union(listB)
        .Union(listC)
        .GroupBy(x => new { x.Index ,x.Name })
        .Select(x=> new Monster(x.Key.Index,x.Key.Name,x.Sum(z=>z.Count)));

你能提供一些样品和期望的结果吗?无法理解这个问题对不起…@D-Shih我解决了这个问题!为了使索引唯一,您可以保持索引分离,并在每次创建对象时递增索引。不要在构造函数中设置索引,只需将其递增1即可。如果我理解正确的话。哦,非常感谢,你是我的英雄!关键点是分组依据->选择和求和()!
List<Monster> listA = new List<Monster>();

listA.Add(new Monster(0, "snails", 600));
listA.Add(new Monster(1, "slimes", 300));

List<Monster> listB = new List<Monster>();
listB.Add(new Monster(0, "snails", 72));

List<Monster> listC = new List<Monster>();
listC.Add(new Monster(0, "snails", 300));
listC.Add(new Monster(1, "slimes", 371));
listC.Add(new Monster(10, "trolls", 152));

var reuslt =  listA
        .Union(listB)
        .Union(listC)
        .GroupBy(x => new { x.Index ,x.Name })
        .Select(x=> new Monster(x.Key.Index,x.Key.Name,x.Sum(z=>z.Count)));
index:0  name:snails  count:972
index:1  name:slimes  count:671
index:10 name:trolls  count:152