gpt4 book ai didi

c# - 呼吁代码 Nerd - 嵌套循环的替代方案?

转载 作者:太空狗 更新时间:2023-10-29 18:03:17 31 4
gpt4 key购买 nike

对于我(或者其他人)来说,拥有一个我需要遍历的对象列表然后与属性列表交互的情况并不少见。我使用嵌套循环,如下所示:

IList<T> listOfObjects;
IList<TProperty> listOfProperties;

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

这是这个问题的时间和性能测试模式吗?或者是否有更高效、更优雅或只是简单有趣的东西(当然仍然具有可读性和可维护性)?

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

谢谢!

更新:我在最积极的意义上使用术语“ Nerd ”。作为维基百科定义的一部分,它“指的是一个热衷于从事智力事件的人”。我所说的“代码 Nerd ”是指那些关心不断提高自己作为程序员,寻找新的、新颖的、优雅的编码方式的人,这些编码方式要快速、可维护且美观!他们很高兴搬出 VB6,并希望聪明人批评他们的代码并帮助他们使自己变得聪明。 (注意:他们也喜欢造以 -ify 结尾的新词)。

最后的说明:

感谢 Dave R、Earwicker 和 TheSoftwareJedi 让我走上了 Linq 之路。这正是我一直在寻找的那种快乐代码!

最佳答案

看起来您正在尝试笛卡尔连接两个列表,并应用 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 语法。

关于c# - 呼吁代码 Nerd - 嵌套循环的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/365352/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com