List对象数组分组与去重
C# List根据对象属性去重的四种方法
** 方法一:循环遍历List,借助Dictionary存储去重的对象。**
Dictionary<string, Item> result = new Dictionary<string, Item>();
foreach (Item item in list)//list为待去重列表
{
Item temp;
if (!result.TryGetValue(item.name, out temp))
{
result.Add(item.name, item);
}
}
List<Item> result_list = result.Values.ToList();
** 方法二:利用ToLookup查找,并转为Dictionary**
List<Item> result = list.ToLookup(item => item.name).ToDictionary(item => item.Key, item => item.First()).Values.ToList();
方法三:自定义Compare方法实现
List<Item> result = list.Distinct(new Compare()).ToList();
** 方法四:利用GroupBy分组实现**
List<Item> result = list.GroupBy(item => item.name).Select(item => item.First()).ToList();
** 其中,对象Item类如下:**
public class Item
{
public string name { get; set; }
public string value { get; set; }
}
** Compare方法如下:**
public class Compare : IEqualityComparer<Item>
{
public bool Equals(Item a, Item b)
{
return a.name == b.name;
}
public int GetHashCode(Item obj)
{
return obj.name.GetHashCode();
}
}
方法五:使用findIndex
result = result .Where((x, i) => detailType.FindIndex(z => z.name == x.name ) == i).ToList();//按照名称去重
“fool me once,shame on you. fool me twice, shame on me.”,翻译过来的意思是“愚弄我一次,是你坏;愚弄我两次,是我蠢”。
分类:
C#知识点总结
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具