我发现自己经常需要处理一个IEnumerable对象,需要循环遍历每个元素,并对每个元素进行计算,该计算依赖于前后n个对象。一个常见的例子是计算滚动平均值,但有时计算比这更复杂,并依赖于列表中每个元素的几个字段。
我从未确定最佳的循环结构。效率很重要,但可维护性和可读性更重要。
有时我将其转换为List,然后使用for循环来获取元素[i-1],[i],[i+1],然后执行我的计算。
其他时候,我将其保留为IEnumerable,但是“缓存”了前几个元素,以便在foreach循环中到达[i+1]之前不会对i进行计算。
我还考虑过使用LinkedList,以便可以使用.Previous和.Next方法。
您有哪些建议最好使用哪种技术?
我从未确定最佳的循环结构。效率很重要,但可维护性和可读性更重要。
有时我将其转换为List,然后使用for循环来获取元素[i-1],[i],[i+1],然后执行我的计算。
其他时候,我将其保留为IEnumerable,但是“缓存”了前几个元素,以便在foreach循环中到达[i+1]之前不会对i进行计算。
我还考虑过使用LinkedList,以便可以使用.Previous和.Next方法。
您有哪些建议最好使用哪种技术?
i
从0开始,j
从3开始,你可以使用k
进行操作,从i
到j
(半开区间,因此包括0、1和2),然后移动++i;++j;
并再次循环k
,直到++j > list.Count
(所以 j 在最后一次遍历时指向列表之外)。 - Jon Hanna