C# List集合根据对象属性判断去重复

年少的隔壁老王 2017-11-15 06:49:48
List<Data> list= new List<Data>();
list.Add(new Data{ lat=37,lon = 105,value = 80 });
list.Add(new Data{ lat= 37,lon = 105,value = 90 });
list.Add(new Data{ lat= 38,lon = 107,value = 70 });
list.Add(new Data{ lat= 37,lon = 105,value = 80 });
list.Add(new Data{ lat= 34,lon = 106,value = 85 });
list.Add(new Data{ lat= 34,lon = 106,value = 70 });
list.Add(new Data{ lat= 38,lon = 109,value = 80 });
. . . . . .

如果lat和lon都相同,则取value大的;新的List中,lat、lon相同的只能有一组数
...全文
3747 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_43470901 2019-06-18
  • 打赏
  • 举报
回复
如果lat和lon都相同,我想取value的和,请问下能实现吗
  • 打赏
  • 举报
回复
list.GroupBy(x => x.lat.ToString() + "|" + x.lon.ToString()).Select(x => x.OrderBy(y => y.Z).Last()).ToList(); 先将要比较的两个属性转化成字符串,在拼接起来进行分组、排序,就可以取到最大的。
threenewbee 2017-11-16
  • 打赏
  • 举报
回复
list.GroupBy(x => new {x.lat, x.lon}).Select(x => x.OrderBy(y => y.value).Last())
  • 打赏
  • 举报
回复
用Dictionary,Key就是你的Data,Value也是Data,但同时要传入Icompare接口的实现,然后每次add时,判断下是否有lat和lot对应的Data存在,如果存在,则判断后确认是否需要赋值
  • 打赏
  • 举报
回复
引用
list.GroupBy(x => new {x.lat, x.lon}).Select(x => x.OrderBy(y => y.value).Last())
为什么我这样写还是有重复的,实际业务有一百多万条的数据,和数据量大小有关系吗?
xuzuning 2017-11-15
  • 打赏
  • 举报
回复
            var r = list.OrderByDescending(x=>x.value).Distinct(x => new { x.lat, x.lon });
foreach (var x in r) Console.WriteLine(x);

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧