我有一个通用的排序列表“results”,其中key = some filename,value = boolean。
我想按布尔条目或值列对列表进行排序。有谁知道我怎么做到这一点?
谢谢!
答案 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()