[英]How to find all items in a sorted List<T> using .NET 2.0?
如何找到已排序集合中的所有項目?
基本上我有一個List<T>
集合(大一個)。 首先,我想對它進行排序,以便可以盡快執行隨后的查找所有匹配項的調用。 我想使用一些內置機制,而不是執行手動搜索。
我最初使用的是FindAll
但是可能會枚舉整個集合,因此我需要加快速度。
它必須在.NET 2.0下完成
編輯
List<Custom>
Custom是具有3個public
字段的類(它是一個容器)
然后我對其進行排序:
collection.Sort((x, y) => x.Id.CompareTo(y.Id));
// Id是Guid
現在,我需要按ID查找集合中的所有項目,而無需枚舉集合中的所有項目。
從.NET 2.0開始, IEqualityComparer<T>
和IEquatable<T>
接口就已經可用,並且此框架版本引入了通用詞典 : Dictionary<TKey, TValue>
。
您可以做的是建立索引 。 例如,如果要在固定時間內通過id獲取對象,則除了將它們添加到列表中之外,還可以將它們添加到Dictionary<Guid, Custom>
。
現在您可以在固定時間內通過id獲取對象:
Custom custom = all[someGuid];
其余的類屬性都可以使用這種方法。
為什么我談論IEqualityComparer<T>
和IEquatable<T>
? 因為如果整個屬性之一是另一個自定義類,則可能需要實現一個所謂的接口(和/或重寫Object.Equals
和Object.GetHashCode
)以實現一個自定義的相等性,因此字典鍵將是獨特。
如果您要組合多個屬性,則可能需要定義一個類以提供一個或多個屬性:
public class Args
{
public CustomA CustomA;
public CustomB CustomB;
}
...並且您可以為Args
實現IEqualityComparer<T>
,以提供組合的哈希碼,並能夠將Args
用作字典鍵。 這就像在一個給定的Args
實例中尋找匹配所有提供的屬性的對象一樣(例如,在where子句中使用&&
運算符...)。
您是否嘗試過從Collections名稱空間排序? 嘗試提供比較器。
為什么不使用2D數組而不是排序列表(第一個維度是GUID)呢?
要么
對列表進行排序,使用IndexOf獲取GUID的第一個索引。 然后,使用RemoveRange刪除索引之前的所有項目。 最后,在剩余范圍內使用“查找”以獲取第一個與您的GUID不匹配的GUID。
參見此處: .NET 2.0上的LINQ支持
我能想到的最簡單的方法是使用Linq:
錯誤道
List<Order> objListOrder = new List<Order>();
GetOrderList(objListOrder); // fill list of orders
正確的路
List<Order> SortedList = objListOrder.OrderBy(o=>o.OrderDate).ToList();
將LINQ與.NET Framework 2.0結合使用
LINQBridge (來自出色的LINQPad的作者)是一個60KB的小型程序集,當與Visual Studio 2008的多目標功能結合使用時,便可以編寫對對象(不是XML或SQL)執行LINQ的代碼,但可以在僅安裝.NET Framework 2.0的計算機。 非常聰明
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.