繁体   English   中英

如何对以下列表进行排序

[英]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();

如果没有以下任何一种,就很难有效地进行这种排序:

  1. 将属性添加到集群类以缓存标记的最大序列号(并处理其可能的失效,这可能会变得棘手);
  2. 将属性添加到集群类以跟踪其索引(在那里可能没有意义,并且可能也会引发失效问题);
  3. 使用簇周围的包装器列表来跟踪1和2中提到的任何值;
  4. 滚动自己的排序算法。

使用LINQ OrderBy:

 var orderedClusters = clusters.OrderBy(list => list.Max(item => item.SequenceNo))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM