繁体   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