2009-08-09 89 views

Trả lời

10

SortedList được tối ưu hóa để các lần xuất hiện xảy ra theo kiểu đặt hàng, do đó liệt kê xảy ra theo thứ tự được sắp xếp với chi phí tối thiểu. Bất cứ điều gì khác đòi hỏi phải sắp xếp lại. Do đó:

 SortedList<string,bool> l=new SortedList<string, bool>(); 
     l.Add("a",true); 
     l.Add("a",false); 
     l.Add("b",true); 
     l.Add("b",false); 
     var orderByVal=l.OrderBy(kvp => kvp.Value); 

nhưng điều tra này sẽ chậm hơn đáng kể và được thực hiện trước, yêu cầu thêm dung lượng để thực hiện.

Tùy thuộc vào tình huống của bạn, việc duy trì 2 trường hợp SortedList với khóa/giá trị được đảo ngược sẽ rẻ hơn.

+1

Bạn không thể thêm cùng một yếu tố vào danh sách hai lần. Có một ngoại lệ –

+0

@BradPatton Vâng, bạn đang đúng ... – spender

2

Trong .NET 2.0, bạn có thể thêm các mục của bạn vào một SortedList:

public static List<MyObject> SortedObjects(IEnumerable<MyObject> myList) { 
    SortedList<string, MyObject> sortedList = new SortedList<string, MyObject>(); 
    foreach (MyObject object in myList) { 
     sortedList.Add(object.ValueIWantToSort, object); 
    } 

    return new List<MyObject>(sortedList.Values); 
    } 
+0

Vấn đề với việc triển khai đó là giá trị bạn muốn sắp xếp có thể không phải là duy nhất như trong câu hỏi của OP. –

3

Đối giảm dần tất cả các mục danh sách

list.OrderByDescending(); 

hoặc

var list = list.OrderByDescending(x => x.Product.Name) 
        .ThenBy(x => x.Product.Price).ToList(); 
+0

đây là về danh sách được sắp xếp, không phải danh sách – Kevman

0

thường mà được sắp xếp bởi khóa đầu tiên trong danh sách, vì vậy nếu bạn trao đổi khóa và giá trị trên phần bổ sung, thì hãy tch rằng trên ràng buộc ví dụ mẫu tôi sử dụng và làm việc tốt

public static SortedList<string, string> GetCountries(string conn) 
     { 
      var dict = new SortedList<string, string>(); 
      dict.Add("","Select One"); 
      var sql = "SELECT [CountryID]  ,[Descr] FROM [dbo].[Countries] Order By CountryID "; 
      using (var rd = GetDataReader(conn, sql)) 
      { 
       while (rd.Read()) 
       { 
        dict.Add(rd["Descr"].ToString(), rd["CountryID"].ToString()); 
       } 
      } 
      return dict; 
     } 

Dim List As SortedList(Of String, String) = VDB.CoreLib.DbUtils.GetCountries(connDB) 

     ddlBankCountry.DataSource = List 
     ddlBankCountry.DataTextField = "Key" 
     ddlBankCountry.DataValueField = "Value" 
     ddlBankCountry.DataBind() 
Các vấn đề liên quan