在c#中有效地搜索集合

本文关键字:搜索 集合 有效地 | 更新日期: 2023-09-27 17:51:08

我有一个AsyncObservable集合的一些类,说"仪表板"。仪表板集合中的每个项都包含其他类的集合,比如"图表"。该图表有各种属性,如名称、类型等。我想搜索基于图表名称,类型等在这个集合。有人能给我一些搜索技巧的建议吗?目前,我正在通过使用foreach遍历整个集合并将输入的输入与集合内的每个项目进行比较来进行搜索(如果数据量很大,这不是那么有效)……我想让它更高效-我正在使用c#.

我的代码是:
foreach (DashBoard item in this.DashBoards)   
  {  
   Chart obj1 = item.CurrentCharts.ToList().Find(chart =>     chart.ChartName.ToUpper().Contains(searchText.ToUpper()));   
                    if (obj1 != null)  
                    {  
                        if (obj1.IsHighlighted != Colors.Wheat)  
                            obj1.IsHighlighted = Colors.Wheat;      
                        item.IsExpanded = true;   
                        flagList.Add(1);   
                    }  
                    else   
                    {    
                        flagList.Add(0);  
                }    
    }

在c#中有效地搜索集合

可以使用LINQ查询

例如,你可以这样做。如果你把你的代码贴出来,我们可以解决这个问题

Dashboard.SelectMany(q => q.Chart).Where(a => a.Name == "SomeName")

下面是参考linq问题:查询嵌套集合

编辑:Foreach loops or LINQ

答案并不明确。任何关于代码成本的争论都有两个方面:性能和可维护性。第一点是显而易见的,也是可以量化的。

底层LINQ将遍历集合,就像foreach一样。LINQ和foreach的区别在于LINQ会延迟执行直到迭代开始。

性能方面可以看看这篇博文:http://www.schnieds.com/2009/03/linq-vs-foreach-vs-for-loop-performance.html

在你的例子中:

如果集合相对较小或中等大小,我建议您使用foreach以获得更好的性能。

在一天结束时。Linq更优雅,但大多数时候效率较低,因为每个代码都有点混乱,但性能更好。

对于大型集合/在使用并行计算有意义的地方,我会选择LINQ,因为性能差距将减少到最小。