c#如何按值列对排序列表进行排序

时间:2009-08-09 00:54:30

标签: c# sorting sortedlist

我有一个通用的排序列表“results”,其中key = some filename,value = boolean。

我想按布尔条目或值列对列表进行排序。有谁知道我怎么做到这一点?

谢谢!

4 个答案:

答案 0 :(得分: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 :(得分:3)

降序所有列表项

list.OrderByDescending(); 

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

答案 2 :(得分:2)

在.NET 2.0中,您可以将项目添加到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);
  }

答案 3 :(得分:0)

通常按列表中的第一个键排序,如果你在add上交换键和值,那么就匹配绑定 该示例示例我使用并正常工作

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