gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:58:05 25 4
gpt4 key购买 nike

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

这是 Monster 类。

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 中有解决这个问题的方法吗?

最佳答案

如果我理解正确,您可以尝试使用 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

关于c# - 将列表添加到另一个列表时,如果出现重复索引,如何添加计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53220246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com