[英]How do I sort the following list
我有一个名为cluster的列表,在该列表中有另一个名为tags的列表,其中有一个sequenceno。
如何使用一行中使用lambda表达式从每个集群的标签中使用最大seuqenceno来对集群进行排序。
就像是
clusters.Sort((a,b) => a.tags......
一个不是非常有效的解决方案(计算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();
如果没有以下任何一种,就很难有效地进行这种排序:
使用LINQ OrderBy:
var orderedClusters = clusters.OrderBy(list => list.Max(item => item.SequenceNo))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.