如果我有一个数组
var foo = new int[] { 1,2,3,4,5 };
使用linq
我可以对每个元素执行操作而不是执行类似的操作吗?
for (int i = 0; i < foo.Length; i++)
{
foo[i] = foo[i] / 2; //divide each element by 2
}
答案 0 :(得分:6)
var foo = new int[] { 1,2,3,4,5 };
foo = foo.Select(x=>x/2).ToArray();
答案 1 :(得分:3)
在我看来,这些都是不好的解决方案。 Select().ToArray()
创建新集合,这意味着它可能会导致较大数组的性能和内存问题。如果你想要一个更短的语法 - 写扩展方法:
static class ArrayExtensions
{
public static void ForEach<T>(this T[] array, Func<T,T> action)
{
for (int i = 0; i < array.Length; i++)
{
array[i] = action(array[i]);
}
}
public static void ForEach<T>(this T[] array, Action<T> action)
{
for (int i = 0; i < array.Length; i++)
{
action(array[i]);
}
}
}
//usage
foo.ForEach(x => x/2)
foo.ForEach(x => Console.WriteLine(x));
答案 2 :(得分:1)
在一个声明中完成。
var foo = new[] { 1, 2, 3, 4, 5 }.Select(m=>m/2);
答案 3 :(得分:1)
使用:
foo = foo.Select(p => p / 2).toArray();