c#-4.0 - 从 C# 中的对象列表中搜索对象的有效方法

标签 c#-4.0

我有一个包含超过 75,000 个对象的列表。要从当前列表中搜索项目,我正在使用以下代码。

from nd in this.m_ListNodes
where
   nd.Label == SearchValue.ToString()
   select
   nd;

这段代码是否高效?

最佳答案

您需要多久搜索一次同一个列表?如果您只搜索一次,您还不如进行直线搜索 - 虽然您可以通过调用 SearchValue.ToString() 一次 使当前代码稍微更高效在查询之前。

如果您要多次对同一个列表执行此搜索,您应该构建一个Lookup 或一个Dictionary:

var lookup = m_ListNodes.ToLookup(nd => nd.Label);

var dictionary = m_ListNodes.ToDictionary(nd => nd.Label);

如果每个标签只有一个条目,则使用字典;如果可能有多个匹配项,请使用查找。

使用这些,进行查找:

var results = lookup[SearchValue.ToString()];
// results will now contain all the matching results

或字典:

WhateverType result;
if (dictionary.TryGetValue(SearchValue.ToString(), out result))
{
    // Result found, stored in the result variable
}
else
{
    // No such item
}

关于c#-4.0 - 从 C# 中的对象列表中搜索对象的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5673714/

相关文章:

c# - C#中的别名资源文件命名空间

c# - 使用 log4net + AutoFac 拦截器记录所有处理的异常

c# - 等待带有动态参数的方法时抛出异常(有时)

c#-4.0 - 无法为堆栈创建新的保护页

c# - List<[]> 中的 Excel 数据输入速度很慢,是否有更好的算法设计?

c# - 禁用粗体按钮

c# - Response.Cache.SetCacheability 不起作用

visual-studio-2010 - Team City 和 Visual Studio 2010 和 Coverage 工具

.net - windows installer 3.1 和 4.5 的区别 创建 SetUP 项目时,选择哪个

winforms - 如何在 C#.net winforms 中验证文本框