使用Linq有一种方法可以对Array中的每个元素执行操作

时间:2013-08-21 05:11:28

标签: c# linq

如果我有一个数组

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
}

4 个答案:

答案 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();