簡體   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