c# Array.ForEach 替换元素的替代方案
是否有一个标准函数可以使用,它类似于 ForEach 来迭代数组,将函数应用于每个元素并将其替换为数组中的结果?
类似于下面的内容,但随后的维度幂包含每个元素上的 IntPow(2, i) 的结果。
dimensionPowers = Enumerable.Range(0, dimensions + 1).ToArray();
Array.ForEach(dimensionPowers,
(i) => IntPow(2, i));
(我知道我可以使用 for 循环迭代数组 - 我只是想知道是否有更简洁的替代方案)。
Is there a standard function I can use that iterates over an array similarly to ForEach, applying a function to each element and replacing it in the array with the result?
Something like the following, but where dimension powers afterwards contains the results of IntPow(2, i) on each element.
dimensionPowers = Enumerable.Range(0, dimensions + 1).ToArray();
Array.ForEach(dimensionPowers,
(i) => IntPow(2, i));
(I know I can iterate over the array with a for loop - I'm just wondering if there's a more concise alternative).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
MSDN 文档说,设计者故意没有在数组中放入“ForEach”,因为:1)编写起来很简单,2)正是你的问题——人们会混淆原始数组是否被修改或不。
大多数 ForEach 类型的数组迭代器实现(您实际上需要一个“map”函数)都会返回一个新的数组实例。例如,您可以使用 LINQ:
或更好的方法:
但是,如果您想就地修改原始数组,可以使用老式的 for 循环:
.NET 的设计者强制您使用这些不同的方法,这样您就可以使用当数组被修改时就会知道。
如果你想实现就地修改,你可以创建一个扩展方法:
The MSDN docs says that the designers deliberately did not put in a "ForEach" with an Array due to the fact that: 1) it is trivial to write, 2) exactly your problem -- people will get confused whether the original array is modified or not.
Most of the ForEach types of array iterator implementation (you actually need a "map" function) returns a new instance of an array. For example, you can use LINQ:
or better:
However, if you want to modify the original array in-place, there is the good old for-loop:
The designers for .NET forces you to use these different methods just so that you'll know when an array is modified.
If you want to implement your in-place modification, you can create an extension method:
我认为您无法更简洁地做到这一点(使用现有方法)。
您可以将这两个步骤合二为一:
I don't think you can do it much more concisely (using existing methods).
You could collapse the two steps in one: