gpt4 book ai didi

c# - 从 List<> 中删除重复的项目并记录重复的数量

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:31:27 24 4
gpt4 key购买 nike

我有一个 List<Item> . Item具有属性 Id , NameAmount .此列表中有重复项。我需要一个新的 List<Item>其中仅包含非重复的 Item s 和 ItemAmount应该是第一个复制了多少次List<Item> .我试过类似的东西

            for (int i = 0; i < list.Count; i++)
{
for (int j = 0; j < list.Count; j++)
{
if (list[i].Name == list[j].Name)
{
list.Remove(prod.Components[j]);
list[i].Amount++;
}
}
}

但是这个循环有一些问题。我的大脑过热了。请帮忙。

最佳答案

一个简单的 LINQ 查询可以获得唯一项及其出现次数:

var distinct = list.GroupBy(o => o.Name)
.Select(g => new { Count = g.Count(), Item = g.First() })
.ToList();

然后你可以修改每个项目的Amount重复计数:

foreach (var row in distinct)
{
row.Item.Amount = row.Count;
}

最后得到一个List<Item>不包含重复项且数量正确:

var uniqueItems = distinct.Select(r => r.Item).ToList();

重要提示:上面的代码假设“重复”项目彼此无法区分,但没有别的(例如,它不需要 Item 来拥有默认构造函数)。根据具体情况,可以将其写成更短的形式。

另外,Amount这里的属性(property)看起来很奇怪。由于重复不保证其金额的总和,Item.Amount 的目的是什么? ?我假设数量为 2 的重复项目应该导致一个项目的数量为 4,但您的代码不会这样做(而我的代码遵循该引导)。

关于c# - 从 List<> 中删除重复的项目并记录重复的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14977794/

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