gpt4 book ai didi

c# - 从我正在迭代的列表中删除项目,或过滤复杂的重复列表

转载 作者:太空宇宙 更新时间:2023-11-03 18:28:26 25 4
gpt4 key购买 nike

好吧,也许我只是瞎了眼,但我没有找到答案:

所以,模型:

public class Dimensions
{
public int Width { get; set; }

public int Height { get; set; }

public int TypeId { get; set; }

public int PeacesForItem { get; set; }
}

我有一个过滤列表的方法:

public List<Dimensions> Consolidation(List<Dimensions> vm)
{
var list = new List<Dimensions>();
if (vm != null)
{
var typeIds = vm.Select(x => x.TypeId).ToHashSet();
foreach (var t in typeIds)
{
foreach(var item in vm)
{
if (t == item.IvericaId)
{
int x = 0;
foreach (var again in vm)
{
if (item.Duzina == again.Duzina && item.Sirina == again.Sirina && item.TypeId== again.TypeId)
{
x ++;
// vm.Remove(item); Not working, who would figure
}
}
list.Add(
new Dimensions
{
Width = item.Width,
Height = item.Height,
TypeId= item.TypeId,
PeacesForItem = x * item.PeacesForItem,
}
);
}
}
}
}
return list;
}

此方法遍历列表项并检查是否存在相同维度的元素。如果有,则需要的数量翻倍。

问题:此代码仍在向新列表添加重复项,我需要将其过滤掉。

我尝试了很多方法,但我想出的每一种方法在设计上都有一些致命的缺陷。

最佳答案

public List<Dimensions> Consolidation(List<Dimensions> vm)
{
return vm.GroupBy(d=>new {d.TypeId, d.Width, d.Height}) // if there are any duplicates, they are grouped here
.Select(g=>new Dimensions(){TypeId = g.Key.TypeId ,
Width = g.Key.Width,
Height = g.Key.Height,
PeacesForItem = g.Sum(dim=>dim.PeacesForItem)}) // number of duplicates in group calculated
.ToList();
}

关于c# - 从我正在迭代的列表中删除项目,或过滤复杂的重复列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28192663/

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