5

如果我有一个数组

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

4 回答 4

6
var foo = new int[] { 1,2,3,4,5 };
foo = foo.Select(x=>x/2).ToArray();
于 2013-08-21T05:13:40.627 回答
4

在我看来,这些都是不好的解决方案。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));
于 2013-08-21T05:45:40.323 回答
1

在单个语句中执行此操作。

var foo = new[] { 1, 2, 3, 4, 5 }.Select(m=>m/2);
于 2013-08-21T05:18:53.037 回答
1

采用:

foo = foo.Select(p => p / 2).toArray();
于 2013-08-21T05:20:39.017 回答