gpt4 book ai didi

c# Array.ForEach 替换元素的替代方法

转载 作者:行者123 更新时间:2023-11-30 13:50:50 24 4
gpt4 key购买 nike

有没有我可以使用的标准函数,它可以像 ForEach 一样遍历数组,将函数应用于每个元素并用结果替换数组中的元素?

类似下面的内容,但之后的维度幂包含每个元素上 IntPow(2, i) 的结果。

dimensionPowers = Enumerable.Range(0, dimensions + 1).ToArray();
Array.ForEach(dimensionPowers,
(i) => IntPow(2, i));

(我知道我可以使用 for 循环遍历数组 - 我只是想知道是否有更简洁的替代方法)。

最佳答案

MSDN 文档说,设计者故意没有放入带有数组的“ForEach”,因为:1) 编写起来很简单,2) 正是你的问题——人们会感到困惑是否是原始的数组是否修改。

大多数 ForEach 类型的数组迭代器实现(您实际上需要一个“映射”函数)返回数组的新实例。例如,您可以使用 LINQ:

newArray = dimensionPowers.Select(i => IntPow(2,i)).ToArray();

或更好:

dimensionPowers = Enumerable.Range(0, dimensions + 1).Select(i => IntPow(2,i)).ToArray();

但是,如果您想就地修改原始数组,可以使用古老的 for 循环:

for (int i=0; i < dimensionPowers.Length; i++) { dimensionPowers[i] = IntPow(2,i); }

.NET 的设计者强制您使用这些不同的方法,以便您知道数组何时被修改。

如果你想实现你的就地修改,你可以创建一个扩展方法:

static void ForEachModifyInPlace<T> (this Array<T> array, Func<T,T> map_action) {
for (int i=0; i < array.Length; i++) { array[i] = map_action(array[i]); }
}

关于c# Array.ForEach 替换元素的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5449347/

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