2015-06-19 41 views
3

根據值進行排序,查找項目的索引以查找排名,但考慮關係的最佳方法是什麼?第五名的索引可能有兩項,所以第六項被跳過,下一次迭代從第七項開始。通過跟蹤索引來做到這一點是最好的方法嗎?使用linq查找索引位置,但考慮依賴於值的關係

return teamTournamentResults 
.OrderByDescending(t => t.RankingPoints) 
.Select((item, index) => new { Item = item, Index = index }) 
.Select(q => new TeamSummaryResultsModel 
       { 
           DivisionRanking = q.Index + 1, 
           RankingPoints= q.Item.RankingPoints, 
+0

你見過這個:https://smehrozalam.wordpress.com/tag/ranking-functions/? –

+0

Linq是必需的嗎? – Shekhar

回答

0

您是否需要找出所有這些產品的排名?如果你只需要一個,那麼O(n log n)排序是沒有必要的。

您可以在線性時間內使用簡單的for循環來計算項目越來越小以及相等項目的列表。然後,您只需將相同的過程應用於等於項目的列表,然後按團隊名稱進行比較以獲得一致的排序。

var equalItems = new List<Team>(); 
int smaller = 0, bigger = 0; 
var myItem = ...; 
foreach(var item in teamTournametResults) 
    if (item.RankingPoints > myItem.RankingPoints) 
     ++bigger; 
    else 
    { 
     if (item.RankingPoints < myItem.RankingPoints) 
       ++smaller; 
     else if (item != myItem) 
      equalItems.Add(item); 
    } 

foreach(var item in equalItems) 
    if (item.Name.CompareTo(myItem.Name) > 0) 
     ++bigger; 
    else 
     ++smaller; 

結果等級現在存儲在bigger中。