簡體   English   中英

如何在排序列表中查找所有項目 <T> 使用.NET 2.0?

[英]How to find all items in a sorted List<T> using .NET 2.0?

如何找到已排序集合中的所有項目?

基本上我有一個List<T>集合(大一個)。 首先,我想對它進行排序,以便可以盡快執行隨后的查找所有匹配項的調用。 我想使用一些內置機制,而不是執行手動搜索。

我最初使用的是FindAll但是可能會枚舉整個集合,因此我需要加快速度。

它必須在.NET 2.0下完成

編輯

  1. 我有一個集合: List<Custom>

Custom是具有3個public字段的類(它是一個容器)

  1. 然后我對其進行排序:

    collection.Sort((x, y) => x.Id.CompareTo(y.Id)); // Id是Guid

  2. 現在,我需要按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.EqualsObject.GetHashCode )以實現一個自定義的相等性,因此字典鍵將是獨特。

如果您要組合多個屬性,則可能需要定義一個類以提供一個或多個屬性:

public class Args
{
    public CustomA CustomA;
    public CustomB CustomB; 
}

...並且您可以為Args實現IEqualityComparer<T> ,以提供組合的哈希碼,並能夠將Args用作字典鍵。 這就像在一個給定的Args實例中尋找匹配所有提供的屬性的對象一樣(例如,在where子句中使用&&運算符...)。

您是否嘗試過從Collections名稱空間排序? 嘗試提供比較器。

List.Sort方法().NET Framework 2.0

為什么不使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM