2010-03-30 51 views
5

Tôi gặp vấn đề mà tôi không thể tìm thấy câu trả lời thông qua tìm kiếm (hoặc là tôi đang tìm kiếm điều hoàn toàn sai!). Tôi có một danh sách các mục được gọi là "Top 10" trong một mục danh sách được sắp xếp mà là dân cư từ DB của tôi (SortedList nơi int là vị trí và chuỗi là mục). Tôi muốn có thể di chuyển các mục lên & xuống thứ tự danh sách khi nhấp vào nút và sau đó lưu đơn hàng mới trở lại DB. Tôi OK với phần DB nó chỉ là tái đặt hàng tôi thực sự đấu tranh với - là một danh sách sắp xếp các bộ sưu tập chính xác cho điều này?Sắp xếp lại bộ sưu tập C#

Rất cám ơn mọi lời khuyên đã cung cấp.

+0

@ Adam: Làm thế nào là quan điểm của danh sách thực hiện? Bạn đang sử dụng loại chế độ xem nào? –

+0

Hi Asaf - Tôi hiện đang nhận được bộ sưu tập và dữ liệu của tôi cho một bộ lặp (mặc dù tôi không quý giá về phương pháp hiển thị). – Adam

Trả lời

6

Một SortedList là để duy trì thứ tự trong SortedList của bạn khi bạn thêm hoặc loại bỏ các mục từ nó.

Bạn nên tạo danh sách tùy chỉnh các đối tượng của mình và sau đó sắp xếp thuộc tính của đối tượng đó.

Vì vậy, nếu mục nhập của bạn trong cơ sở dữ liệu của bạn là như thế này bạn có thể đặt nó vào một đối tượng, thêm nó vào danh sách và sau đó sắp xếp nó bằng cách sử Lambda mà trên đó từng tiêu chí mà bạn thích

public class LeaguePosition 
{ 
    public int Position { get; set; } 
    public string Team { get; set; } 
} 


List<LeaguePosition> League = new List<LeaguePosition>(); 
League.Add(new LeaguePosition() { Position = 2, Team = "Wolves" }); 
League.Add(new LeaguePosition() { Position = 3, Team = "Spurs" }); 
League.Add(new LeaguePosition() { Position = 1, Team = "Villa" }); 

League.Sort((teamA, teamB) => teamA.Position.CompareTo(teamB.Position)); 

Bạn cũng có thể sau đó sử dụng RemoveAt() và Insert() để di chuyển các mục về vị trí tùy chỉnh trong danh sách.

LeaguePosition teamToMove = League[1]; 
League.RemoveAt(1); 
League.Insert(2, teamToMove); 
+0

Cảm ơn bạn đã trả lời (câu trả lời liên quan đến bóng đá là dễ hiểu hơn!) Tôi nghĩ là tôi đã hiểu, vì vậy trong ví dụ của bạn nếu Wolves bị di chuyển xuống vị trí Spurs tự động đã di chuyển lên một vị trí? Tất cả các thành viên khác trong danh sách có duy trì vị trí và cách nào là mục mà bạn đang thay thế di chuyển, nó luôn luôn hoạt động? – Adam

+0

Có, chúng duy trì vị trí của chúng trong mảng theo tiêu chí sắp xếp cuối cùng của bạn.Sau đó, bạn đang định vị lại trong loại đó cho đến khi bạn quyết định sắp xếp lại. –

3

Không, một SortedList sẽ giữ những thứ theo thứ tự được sắp xếp (alpha/số). Bạn muốn một danh sách đơn giản sẽ cho phép bạn kéo mọi thứ ra và chèn chúng vào các vị trí khác nhau.

0

Một SortedList sẽ buộc mỗi mục phải theo dõi vị trí của nó trong danh sách liên quan đến các mục khác (vị trí int của bạn). Điều này phải là một trách nhiệm của Bộ sưu tập, vì vậy bạn nên sử dụng một số loại Bộ sưu tập cho phép bạn di chuyển mọi thứ lên/xuống/xung quanh mà không cần phải sửa từng mục theo cách thủ công.

+1

Cảm ơn - bạn có thể đề xuất một Colection phù hợp không? – Adam

0

Tôi muốn nói SortedList chính xác là những gì bạn muốn. Khi bạn lấy lại dữ liệu từ cơ sở dữ liệu bạn muốn giữ nó theo thứ tự dựa trên trường vị trí (những gì tôi có thể nói từ OP của bạn). Tôi giả sử bạn sẽ có một lớp có chứa dữ liệu bạn đang nhận được từ DB. Để giữ dữ liệu theo thứ tự đúng, bạn sẽ cần phải triển khai giao diện IComparable trong lớp tùy chỉnh của bạn để SortedList biết giá trị nào cần sử dụng để giữ danh sách theo thứ tự. Bằng cách này khi bạn thêm/xóa các mục, bạn sẽ giữ chúng theo đúng thứ tự.

Bạn có thể sử dụng danh sách chung <> nhưng sau đó bạn phải viết tất cả mã để sắp xếp các mục của mình, SortedList đã thực hiện việc này sao lại phát minh ra bánh xe?

Hãy nhìn vào trang này để biết thêm:

http://www.dotnetspider.com/resources/4679-Applying-custom-sort-SortedList.aspx

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