2011-06-21 27 views
17

Tôi cần sắp xếp tệp điểm cao cho trò chơi của mình mà tôi đã viết.Cách sắp xếp danh sách <> bằng số nguyên được lưu trữ trong cấu trúc Danh sách của tôi <> giữ

Mỗi điểm cao có biến Tên, Điểm và Ngày. Tôi lưu trữ mỗi một trong một danh sách.

Đây là cấu trúc chứa từng dữ liệu điểm cao.

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

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

Vậy làm cách nào để sắp xếp Danh sách loại Highscores theo biến số điểm của từng đối tượng trong danh sách?

Any help is appreciated: D

+0

Nếu bạn thực sự lưu trữ các đối tượng của mình trong [Danh sách '] (http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx), có một [' Sắp xếp() '] (Phương thức http://msdn.microsoft.com/en-us/library/3da4abas.aspx) ... –

Trả lời

46

Tôi không biết lý do tại sao tất cả mọi người đang đề xuất giải pháp LINQ dựa rằng sẽ yêu cầu bộ nhớ bổ sung (đặc biệt là kể từ khi Xếp hạng là một kiểu giá trị) và một hãy gọi tới ToList() nếu một người muốn sử dụng lại kết quả. Giải pháp đơn giản nhất là sử dụng phương pháp Sắp xếp được xây dựng trong Danh sách

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

Điều này sẽ sắp xếp danh sách tại chỗ.

+0

Ngọt ngào đã làm các trick :) – Lucidity

+0

+1 Ngọt ngào đã làm các trick :) – mjb

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

hoặc sử dụng OrderByDescending để sắp xếp theo cách ngược lại

1
List<Highscore> mylist = GetHighScores(); 

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

Sử dụng LINQ:

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

Here là một nguồn lực lớn để tìm hiểu về các toán tử LINQ khác nhau.

1

này sẽ sắp xếp danh sách với số điểm cao nhất đầu tiên:

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

Kết quả của việc gọi 'OrderBy()' không phải là danh sách. –

+0

@ Jeff: Tất nhiên là bạn đúng! Đã chỉnh sửa, cảm ơn :-) –

Các vấn đề liên quan