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

时间:2018-11-09 05:17:40

标签: 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 = 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 */

我不希望列表A中有重复的索引。 但是,我只希望重复索引增加了计数。

列表A包含600个蜗牛和300个黏液。 列表B有72个蜗牛。 清单C中有300个蜗牛,371个黏液和152个巨魔。

我想合并所有怪物列表,并仅显示每个怪物的数量。

 -All Monsters in world-
 [Index]  [Name]  [Count]
    0      snail    972
    1      slime    671
    10     troll    152

Linq中有解决方案吗?

1 个答案:

答案 0 :(得分:2)

如果我正确理解,您可以尝试使用linq Union合并这些集合,然后使用GroupBySum获得预期的结果。

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)));

c# online

结果

index:0  name:snails  count:972
index:1  name:slimes  count:671
index:10 name:trolls  count:152