【问题标题】:c# How to sort a sorted list by its value columnc#如何按其值列对排序列表进行排序
【发布时间】:2010-11-18 00:40:41
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: c# sorting sortedlist


    【解决方案1】:

    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 实例可能会更便宜。

    【讨论】:

    • 您不能将同一个元素添加到列表中两次。抛出异常
    【解决方案2】:

    降序所有列表项

    list.OrderByDescending(); 
    

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

    【讨论】:

    • 这是关于排序列表,而不是列表
    【解决方案3】:

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

    【讨论】:

    • 该实现的问题是您想要排序的值可能不像 OP 的问题那样是唯一的。
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多