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相同的只能有一组数
5 个解决方案
#1
var r = list.OrderByDescending(x=>x.value).Distinct(x => new { x.lat, x.lon });
foreach (var x in r) Console.WriteLine(x);
#2
list.GroupBy(x => new {x.lat, x.lon}).Select(x => x.OrderBy(y => y.value).Last())
#3
为什么我这样写还是有重复的,实际业务有一百多万条的数据,和数据量大小有关系吗?
#4
用Dictionary,Key就是你的Data,Value也是Data,但同时要传入Icompare接口的实现,然后每次add时,判断下是否有lat和lot对应的Data存在,如果存在,则判断后确认是否需要赋值
#5
list.GroupBy(x => x.lat.ToString() + "|" + x.lon.ToString()).Select(x => x.OrderBy(y => y.Z).Last()).ToList();
先将要比较的两个属性转化成字符串,在拼接起来进行分组、排序,就可以取到最大的。
先将要比较的两个属性转化成字符串,在拼接起来进行分组、排序,就可以取到最大的。
#1
var r = list.OrderByDescending(x=>x.value).Distinct(x => new { x.lat, x.lon });
foreach (var x in r) Console.WriteLine(x);
#2
list.GroupBy(x => new {x.lat, x.lon}).Select(x => x.OrderBy(y => y.value).Last())
#3
为什么我这样写还是有重复的,实际业务有一百多万条的数据,和数据量大小有关系吗?
#4
用Dictionary,Key就是你的Data,Value也是Data,但同时要传入Icompare接口的实现,然后每次add时,判断下是否有lat和lot对应的Data存在,如果存在,则判断后确认是否需要赋值
#5
list.GroupBy(x => x.lat.ToString() + "|" + x.lon.ToString()).Select(x => x.OrderBy(y => y.Z).Last()).ToList();
先将要比较的两个属性转化成字符串,在拼接起来进行分组、排序,就可以取到最大的。
先将要比较的两个属性转化成字符串,在拼接起来进行分组、排序,就可以取到最大的。