2009-08-09 3 views

Antwort

10

SortedList ist so optimiert, dass Inertionen in geordneter Weise auftreten, sodass die Aufzählung in einer sortierten Reihenfolge zu minimalen Kosten erfolgt. Alles andere erfordert eine Umsortierung. Also:

aber diese Aufzählung wird deutlich langsamer zu berechnen sein, und im Voraus durchgeführt werden, zusätzliche Speicher erforderlich, um dies zu tun.

Je nach Situation kann es günstiger sein, 2 SortedList-Instanzen mit umgekehrtem Schlüssel/Wert zu warten.

+1

fein verwenden und arbeiten Sie nicht zweimal das gleiche Element in die Liste aufnehmen können. Wirft eine Ausnahme –

+0

@BradPatton Ja, Sie haben Recht ... – spender

2

In .NET 2.0, könnten Sie Ihre Einzelteile zu einem SortedList hinzufügen:

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

Das Problem mit dieser Implementierung ist, dass der Wert, den Sie sortieren möchten, möglicherweise nicht eindeutig ist, wie in der Frage des OP. –

3

Für absteigend alle Listenelemente

list.OrderByDescending(); 

oder

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

Hier geht es um die sortierte Liste, nicht um die Liste – Kevman

0

Normalerweise, die sortiert durch den ersten Schlüssel auf der Liste, also, wenn Sie den Schlüssel und den Wert auf dem Add austauschen, dann ma tch, dass auf der Bindung dass Probe Beispiel i

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()