C# 如何查找已排序列表中的所有项目<;T>;使用.NET2.0?
如何查找已排序集合中的所有项目 基本上我有一个C# 如何查找已排序列表中的所有项目<;T>;使用.NET2.0?,c#,.net,.net-2.0,C#,.net,.net 2.0,如何查找已排序集合中的所有项目 基本上我有一个列表集合(大的)。首先,我想对它进行排序,以便可以尽可能快地执行查找所有匹配项的后续调用。我希望使用一些内置机制,而不是执行手动搜索 我最初使用的是FindAll,但这可能会枚举整个集合,我需要加快速度 它必须在.NET 2.0下完成 编辑 我有一个收藏:List Custom是一个具有3个公共字段的类(它是一个容器) 然后我把它分类: collection.Sort((x,y)=>x.Id.CompareTo(y.Id))//Id是一个Guid 现
列表
集合(大的)。首先,我想对它进行排序,以便可以尽可能快地执行查找所有匹配项的后续调用。我希望使用一些内置机制,而不是执行手动搜索
我最初使用的是FindAll
,但这可能会枚举整个集合,我需要加快速度
它必须在.NET 2.0下完成
编辑
List
collection.Sort((x,y)=>x.Id.CompareTo(y.Id))代码>//Id是一个Guid
您是否尝试过从集合名称空间进行排序?尝试提供一个比较器
是否尝试从集合名称空间排序?尝试提供一个比较器 请参见此处: 我能想到的最简单的方法是使用Linq: 走错路
List<Order> objListOrder = new List<Order>();
GetOrderList(objListOrder); // fill list of orders
List objListOrder=new List();
GetOrderList(objListOrder);//填写订单清单
正道
List<Order> SortedList = objListOrder.OrderBy(o=>o.OrderDate).ToList();
List-SortedList=objListOrder.OrderBy(o=>o.OrderDate.ToList();
将LINQ与.NET Framework 2.0结合使用
(来自优秀LINQPad的作者)是一个60KB的小程序集,当与Visual Studio 2008的多目标功能结合使用时,可以编写代码,对对象(不是XML或SQL)执行LINQ,但在安装了.NET Framework 2.0的机器上运行良好。非常聪明请看这里:
我能想到的最简单的方法是使用Linq:
走错路
List<Order> objListOrder = new List<Order>();
GetOrderList(objListOrder); // fill list of orders
List objListOrder=new List();
GetOrderList(objListOrder);//填写订单清单
正道
List<Order> SortedList = objListOrder.OrderBy(o=>o.OrderDate).ToList();
List-SortedList=objListOrder.OrderBy(o=>o.OrderDate.ToList();
将LINQ与.NET Framework 2.0结合使用
(来自优秀LINQPad的作者)是一个60KB的小程序集,当与Visual Studio 2008的多目标功能结合使用时,可以编写代码,对对象(不是XML或SQL)执行LINQ,但在安装了.NET Framework 2.0的机器上运行良好。非常聪明为什么不使用2D数组而不是排序列表,其中第一个维度是GUI 或
对列表排序,使用IndexOf获取GUID的第一个索引。然后,使用RemoveRange删除索引之前的所有项。最后,在剩余范围内使用Find来获取与GUID不匹配的第一个GUID。为什么不使用2D数组而不是排序列表,其中第一个维度是GUID 或 对列表排序,使用IndexOf获取GUID的第一个索引。然后,使用RemoveRange删除索引之前的所有项。最后,使用剩余范围上的Find来获取第一个与您的GUID不匹配的GUID。
IEqualityComparer
和IEquatable
接口自.NET 2.0和引入此框架版本以来一直可用:Dictionary
你能做的就是建立索引。例如,如果要在固定时间内按id获取对象,除了将它们添加到列表中,还可以将它们添加到字典中
现在,您可以在固定时间内按id获取对象:
Custom custom = all[someGuid];
其他类属性可以遵循这种方法
为什么我要谈论IEqualityComparer
和IEquatable
?因为如果整个属性中有一个是另一个自定义类,那么可能需要实现一个所谓的接口(和/或重写Object.Equals
和Object.GetHashCode
)来实现自定义等式,因此字典键将是唯一的
如果要组合多个属性,可能需要定义一个类来提供一个或多个属性:
public class Args
{
public CustomA CustomA;
public CustomB CustomB;
}
…您可以为Args
实现一个IEqualityComparer
,以提供一个组合哈希代码,并能够使用Args
作为字典键。这就像在给定的Args
实例中查找与所有提供属性匹配的对象一样。。。(例如,在where子句中使用&&
运算符…。IEqualityComparer
和IEquatable
接口自.NET 2.0以来就已经可用,并且引入了此框架版本:字典
你能做的就是建立索引。例如,如果要在固定时间内按id获取对象,除了将它们添加到列表中,还可以将它们添加到字典中
现在,您可以在固定时间内按id获取对象:
Custom custom = all[someGuid];
其他类属性可以遵循这种方法
为什么我要谈论IEqualityComparer
和IEquatable
?因为如果整个属性中有一个是另一个自定义类,那么可能需要实现一个所谓的接口(和/或重写Object.Equals
和Object.GetHashCode
)来实现自定义等式,因此字典键将是唯一的
如果要组合多个属性,可能需要定义一个类来提供一个或多个属性:
public class Args
{
public CustomA CustomA;
public CustomB CustomB;
}
…您可以为Args
实现一个IEqualityComparer
,以提供一个组合哈希代码,并能够使用Args
作为字典键。这就像在给定的Args
实例中查找与所有提供属性匹配的对象一样。。。(例如,在where子句中使用&&
运算符…。您的问题不是很清楚,是否要查找所有?这是违反直觉的…你已经有了完整的列表。还有,排序后的集合是什么类型的