gpt4 book ai didi

c# - 从排序列表中删除重复项 C#

转载 作者:行者123 更新时间:2023-11-30 14:33:55 26 4
gpt4 key购买 nike

我有一个关于大量文件的详细信息列表。此列表包含文件 ID、上次修改日期和文件路径。问题是存在旧版本文件的副本,有时文件路径不同。无论文件路径如何,我只想存储文件的最新版本。所以我创建了一个遍历有序列表的循环,检查 ID 是否唯一,如果是,则将其存储在一个新的唯一列表中。

 var ordered = list.OrderBy(x => x.ID).ThenByDescending(x => x.LastModifiedDate);

List<Item> unique = new List<Item>();

string curAssetId = null;

foreach (Item result in ordered)
{
if (!result.ID.Equals(curAssetId))
{
unique.Add(result);
curAssetId = result.ID;
}
}

然而,这仍然允许重复项进入数据库,我不明白为什么这段代码没有按预期工作。我所说的重复是指文件具有相同的 ID 但文件路径不同,正如我之前所说,这应该不是问题。不管途径如何,我只想要最新版本。其他人可以看到问题是什么吗?谢谢

   var ordered = listOfItems.OrderBy(x => x.AssetID).ThenByDescending(x => x.LastModifiedDate);
List<Item> uniqueItems = new List<Item>();

foreach (Item result in ordered)
{
if (!uniqueItems.Any(x => x.AssetID.Equals(result.AssetID)))
{
uniqueItems.Add(result);

}
}

这就是我现在拥有的,它仍然允许重复

最佳答案

这是因为,您没有搜索整个列表来检查 id 是否唯一

List<Item> unique = new List<Item>();

string curAssetId = null; // here is the problem

foreach (Item result in ordered)
{
if (!result.ID.Equals(curAssetId)) // here you only compare the last value.
{
unique.Add(result);
curAssetId = result.ID; // You are only assign the current ID value and
}
}

要解决这个问题,更改以下内容

     if (!result.ID.Equals(curAssetId)) // here you only compare the last value.
{
unique.Add(result);
curAssetId = result.ID; // You are only assign the current ID value and
}

if (!unique.Any(x=>x.ID.Equals(result.ID))) 
{
unique.Add(result);

}

关于c# - 从排序列表中删除重复项 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15109765/

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