【发布时间】:2010-11-18 00:40:41
【问题描述】:
我有一个通用的排序列表“结果”,其中键 = 一些文件名,值 = 布尔值。
我想按布尔条目或值列对列表进行排序。有谁知道我该怎么做?
谢谢!
【问题讨论】:
标签: c# sorting sortedlist
我有一个通用的排序列表“结果”,其中键 = 一些文件名,值 = 布尔值。
我想按布尔条目或值列对列表进行排序。有谁知道我该怎么做?
谢谢!
【问题讨论】:
标签: c# sorting sortedlist
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()
【讨论】: