如果将列表添加到另一个列表时出现重复索引,如何添加计数?
这是怪物类。
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中有解决方案吗?
答案 0 :(得分:2)
如果我正确理解,您可以尝试使用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)));
结果
index:0 name:snails count:972
index:1 name:slimes count:671
index:10 name:trolls count:152