Csharp/C#教程:C#嵌套的foreach循环优化分享


C#嵌套的foreach循环优化

我有一个嵌套的foreach循环,我真的需要减少计算时间。 每个集合大约有50个成员,因此推断是巨大的。 我查看了很多关于SelectMany的信息,但我仍然不完全确定如何使用它,或者它是否是正确的解决方案。

List StringList; //Populated in previous code Type[] assemblyTypes = RandomAssembly.GetTypes(); foreach (String name in StringList) { foreach (Type at in assemblyTypes) { if (name == at.Name) { //Do stuff. } } } 

提前致谢!

使用查找(例如字典)来提高检查类型名称的速度:

 List StringList; //Populated in previous code Dictionary assemblyTypes = RandomAssembly.GetTypes() .ToDictionary(t => t.Name, t => t); foreach (String name in StringList) { if (assemblyTypes.ContainsKey(name)) { //Do stuff. } } } 

您还应该检查2个集合( StringListassemblyTypes )中哪一个可能更大。 您通常希望将较大的转换为查找以减少迭代次数。

将Type []加载到Dictionary或HashSet中(取决于您的.NET版本),然后内部循环消失。

 List StringList; //Populated in previous code Type[] assemblyTypes = RandomAssembly.GetTypes(); Dictionary typesHash = new Dictionary(); foreach ( Type type in assemblyTypes ) { typesHash.Add( type.Name, type ); } foreach (String name in StringList) { Type type = null; if ( typesHash.TryGetValue( name, out type ) ) { // do something with type } } 

您可以尝试以下方法:

 assemblyTypes.Where(x => StringList.Contains(x.Name)); 

请记住,这是区分大小写并忽略空格,因此如果这是一个问题,您将需要添加案例考虑或修剪。

编辑:(循环使用示例)

 foreach (Type item in assemblyTypes.Where(x => StringList.Contains(x.Name))) { // Do stuff } 

如果您的数组/列表包含许多项,则可以尝试使用Parallel ForEach循环 。

最佳优化可能是通过查询名称而不是查询实现的接口。

确保您正在优化代码的正确问题/部分。

上述就是C#学习教程:C#嵌套的foreach循环优化分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/955903.html

(0)
上一篇 2021年11月21日
下一篇 2021年11月21日

精彩推荐