如何对以下列表进行排序

Rem*_*ner 2 .net c# sorting lambda

我有一个名为cluster的列表,在该列表中有另一个名为tags的列表,其中有一个sequenceno.

如何使用一行中使用lambda表达式从每个集群的标签中使用最大seuqenceno来对集群进行排序.

就像是

clusters.Sort((a,b) => a.tags......
Run Code Online (Sandbox Code Playgroud)

R. *_*des 7

一个不是非常有效的解决方案(计算O(N log N)最大值,但是就地运行):

clusters.Sort((a,b) => a.tags.Max(x => x.sequenceno)
                        .CompareTo(b.tags.Max(x => x.sequenceno)));
Run Code Online (Sandbox Code Playgroud)

一个更好的解决方案(仅计算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();
Run Code Online (Sandbox Code Playgroud)

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

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