2009-08-09 20 views
8

我有一个通用的排序列表“结果”与键=一些文件名和值=布尔值。c#如何排序排序列的值列

我想通过布尔项或值列对列表进行排序。有谁知道我该怎么做?

谢谢!

回答

10

SortedList进行了优化,以便惰性以有序的方式发生,以便以最小的成本按排序顺序进行枚举。其他任何事情都需要重新排序。因此:

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

但此枚举会显著慢来计算,并先期进行,需要额外的存储空间这样做。

根据您的情况,维护2个SortedList实例的键/值颠倒可能会更便宜。

+1

不能同一个元素添加到列表中的两倍。抛出异常 – 2014-10-23 18:09:16

+0

@BradPatton是的,你是对的... – spender 2014-10-23 19:39:20

2

在.NET 2.0中,你可以添加你的资料转移到排序列表:

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

该实现的问题是,你想排序的值可能不是唯一的,如在OP的问题。 – 2014-10-23 18:06:10

3

降序所有列表项

list.OrderByDescending(); 

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

这是关于排序列表,而不是列表 – Kevman 2017-05-18 19:17:52

0

通常说来分类通过列表中的第一个键,所以如果您交换添加的键和值,然后马TCH上绑定 我使用的样品例如,做工精细

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