2011-06-21 21 views
17

我需要對我編寫的遊戲排序高分檔案。如何使用存儲在struct my List <>中的整數對列表<>進行排序

每個高分都有一個Name,Score和Date變量。我將每個存儲在一個List中。

這裏是保存每個highscores數據的結構。

struct Highscore 
{ 
    public string Name; 
    public int Score; 
    public string Date; 

    public string DataAsString() 
    { 
     return Name + "," + Score.ToString() + "," + Date; 
    } 
} 

那麼我如何按列表中每個對象的score變量對類型Highscores列表進行排序呢?

任何幫助表示讚賞:d

+0

如果實際上將對象存儲在['List '](http://msdn.microsoft.com/zh-cn/library/6sh2ey19.aspx)中,則存在['Sort()']( http://msdn.microsoft.com/en-us/library/3da4abas.aspx)方法... –

回答

46

我不知道爲什麼每個人都提出了基於LINQ的解決方案,將需要額外的內存(特別是由於排行榜是值類型)和如果想重用結果,則調用ToList()。最簡單的解決方案是使用列表的內置排序方法

list.Sort((s1, s2) => s1.Score.CompareTo(s2.Score)); 

這將對列表進行排序。

+0

甜蜜,做了訣竅:) – Lucidity

+0

+1甜蜜的訣竅:) – mjb

6
var sortedList = yourList.OrderBy(x => x.Score); 

或使用OrderByDescending以相反的方式進行排序

1
List<Highscore> mylist = GetHighScores(); 

var sorted = mylist.OrderBy(h=>h.Score); 
2

使用LINQ:

myScores.OrderBy(s => s.Score); 

Here是一個很好的資源,瞭解不同的LINQ運營商。

1

這將首先排序得分最高的名單:

IEnumerable<Highscore> scores = GetSomeScores().OrderByDescending(hs => hs.Score); 
+0

然而調用'OrderBy()'的結果不是一個列表。 –

+0

@Jeff:當然你是對的!編輯,謝謝:-) –

相關問題