繁体   English   中英

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

[英]c# How to sort a sorted list by its value column

我有一个通用的排序列表“结果”,键 = 某个文件名,值 = 布尔值。

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

谢谢!

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

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

但是这种枚举的计算速度要慢得多,并且需要预先执行,因此需要额外的存储空间。

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

用于降序所有列表项

list.OrderByDescending(); 

要么

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

在 .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);
  }

通常按列表中的第一个键排序,因此如果您在添加时交换键和值,然后在我使用的示例示例的绑定上匹配它并且工作正常

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM