我最近在编写一些代码时遇到了一种方法,该方法具有 3 个 for 循环,适用于 2 个不同的数组。
基本上,发生的事情是一个 foreach 循环遍历一个向量并从一个对象转换 DateTime,然后另一个 foreach 循环从一个对象转换一个 long 值。这些循环中的每一个都会将转换后的值存储到列表中。
最后一个循环将遍历这两个列表并将这些值存储到另一个列表中,因为需要为日期完成一个最终转换。
然后在完成所有这些之后,使用 ToArray() 将最后两个列表转换为数组。
好的,请耐心等待,我终于开始回答我的问题了。
所以,我决定制作一个 for 循环来替换前两个 foreach 循环,并一次性转换值(第三个循环是准必要的,不过,我确信通过一些工作我也可以把它进入单循环)。
但后来我阅读了 Gustav Duarte 的文章“您的计算机在等待时做了什么”并开始思考内存管理以及在同时访问两个列表的 for 循环中访问数据时数据在做什么。
所以我的问题是,对于这样的事情,最好的方法是什么?尝试压缩 for 循环,使其在尽可能少的循环中发生,从而导致对不同列表的多次数据访问。或者,允许多个循环并让系统引入它预期的数据。这些列表和数组可能很大,循环遍历 3 个列表,也许 4 个取决于 ToArray() 的实现方式,可能会变得非常昂贵 (O(n^3) ??)。但是根据我在上述文章和我的 CS 类(class)中的理解,必须获取数据也可能很昂贵。
有人愿意提供任何见解吗?还是我已经完全失去理智,需要重新学习我没有学过的东西?
谢谢
最佳答案
最好的方法?编写最易读的代码,计算出它的复杂性,并确定这是否真的是一个问题。
如果您的每个循环都是 O(n),那么您仍然只有一个 O(n) 操作。
话虽如此,但听起来 LINQ 方法确实更具可读性……而且很可能也更高效。诚然,我们还没有看到代码,但我怀疑它是 LINQ 的理想。
关于c# - 回归本源; for 循环、数组/向量/列表和优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/335807/