我有一个名为clusters的列表,在该列表中还有另一个名为tags的列表,其中包含sequenceno。
如何使用一行中使用lambda表达式从每个集群的标签中使用最大值seuqenceno来对集群进行排序。
像
这样的东西clusters.Sort((a,b) => a.tags......
答案 0 :(得分:7)
一种效率不高的解决方案(计算O(N log N)最大值,但就地运行):
clusters.Sort((a,b) => a.tags.Max(x => x.sequenceno)
.CompareTo(b.tags.Max(x => x.sequenceno)));
一个更好的解决方案(仅计算O(N)最大值,但不能就地工作):
var max = clusters.ConvertAll(c => c.tags.Max(x => x.sequenceno);
clusters = clusters.Select((x,i) => new{x,i})
.OrderBy(xi => max[xi.i].CompareTo(max[xi.j]))
.Select(xi => xi.x)
.ToList();
如果没有以下任何一种方法,就很难有效地进行这种排序:
答案 1 :(得分:3)
使用LINQ OrderBy:
var orderedClusters = clusters.OrderBy(list => list.Max(item => item.SequenceNo))