当前位置:  开发笔记 > 编程语言 > 正文

调用同伴代码书呆子 - 嵌套循环的替代方案?

如何解决《调用同伴代码书呆子-嵌套循环的替代方案?》经验,为你挑选了3个好方法。

我(或可能是其他任何人)拥有一个我需要迭代的对象列表然后与属性列表进行交互并不少见.我使用嵌套循环,如下所示:

IList listOfObjects;
IList listOfProperties;

foreach (T dataObject in listOfObjects)
{
    foreach (TProperty property in listOfProperties)
    {
        //do something clever and extremely useful here
    }
}

这是针对此问题的时间和性能测试模式吗?或者是否有更高性能,更优雅或更简单的乐趣(当然仍然可读和可维护)?

上面的代码并没有让我微笑.有人可以帮助我的循环带来一些快乐吗?

谢谢!

更新:我在最积极的意义上使用术语"书呆子".作为维基百科定义的一部分,它将"指的是一个热衷于追求智力活动的人"."代码书呆子"我指的是一个关心不断改进自己作为程序员的人,寻找新的,新颖的,优雅的快速,可维护和美丽的编码方式!他们很高兴退出VB6并希望聪明的人批评他们的代码并帮助他们自己聪明.(注意:他们也喜欢制作以-ify结尾的新单词).

最后的说明:

感谢Dave R,Earwicker和TheSoftwareJedi让我沿着Linq路走下去.这只是我正在寻找的那种快乐代码!



1> Dave R...:

嵌套循环当然没有错.它们快速,可读,并且自软件开发迈出第一步以来就已存在.

只要你想,你遍历集合执行操作,您可能会发现LINQ将是一个有趣的途径去探索:

http://msdn.microsoft.com/en-us/vcsharp/aa904594.aspx

你将自己限制在更高版本的框架(3.5以后),但实际上你可能会发现功能编程方法非常优雅.在起作用,当你走这条路的其他语言功能包括lambda表达式和匿名方法,这是他们自己的权利迷人.

祝你好运,我希望你在路上玩得开心 - 这是一个很好的方法:)



2> TheSoftwareJ..:

看起来你正在尝试将笛卡尔加入两个列表,并应用where子句.这是一个简单的示例,显示了执行此操作的Linq语法,我认为这是您正在寻找的.list1和list2可以是任何IEnumerable,你的where子句可以包含更详细的逻辑,在你的select子句中你可以抽出你需要的东西.

        var list1 = Enumerable.Range(1, 100);
        var list2 = Enumerable.Range(1, 100);

        foreach (var item in from a in list1
                             from b in list2
                             where a % b == 0
                             select new { a, b })
        {
            Console.WriteLine(item);
        };

表演将与您发布的内容相同 - 不希望在这方面误导.我更喜欢这种Linq语法.



3> Daniel Earwi..:
foreach (var pair in from obj in listOfObjects
                     from prop in listOfProperties  
                     select new {obj, prop})
{
   Console.WriteLine(pair.obj + ", " + pair.prop);
}

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有