我遇到了一个纯粹假设的问题,如果我找到合适的linq方法,感觉它有一个简单的解决方案......
我有两个整数数组,我知道它们的大小相同。我想创建一个相同大小的第三个数组,其中第三个数组中的元素是相应位置中前两个数组中元素的总和。
下面是一个应该显示我想要做的方法。
public static int[] AddArrays(int[] a, int[] b)
{
int[] newArray = new int[a.Length];
for (int i = 0; i<a.Length; i++)
{
newArray[i]=a[i]+b[i];
}
return newArray;
}
是否有任何我可以使用的Linq方法,如
return a.DoStuff(b, (x,y) => x+y)
或类似的东西?
我应该注意,这可能属于家庭作业的类别,因为最初的问题来自我正在看的网站(虽然我找不到问题的直接链接)而不是我需要工作的问题或任何东西。
如果不存在简单方法,那么Linqy最常用的方法是什么?一个array.each
似乎有这样的问题:无法将第二个数组轻松索引以将值添加到您正在迭代的值中,这让我想知道在这种情况下Linq是否会有任何帮助。
答案 0 :(得分:49)
拉链:)
var a = new int[] {1,2,3 };
var b = new int[] {4,5,6 };
a.Zip(b, (x, y) => x + y)
答案 1 :(得分:14)
您可以使用Select方法。
int[] a = new[] { 1, 2, 3 };
int[] b = new[] { 10, 20, 30 };
var c = a.Select ((x, index) => x + b[index]).ToArray();
答案 2 :(得分:4)
public static int[] AddArrays(int[] a, int[] b)
{
return a.Zip(b, (x,y) => x+y).ToArray();
}
答案 3 :(得分:1)
IList<int> first = new List<int> { 2, 3, 4, 5 };
IList<int> second = new List<int> { 2, 3, 4, 5 };
var result = Enumerable.Zip(first, second, (a, b) => a + b);
答案 4 :(得分:1)
没有LINQ:
private static IEnumerable<int> AddArrays(IEnumerable<int> a1, IEnumerable<int> a2)
{
var e1 = a1.GetEnumerator();
var e2 = a2.GetEnumerator();
while (e1.MoveNext() && e2.MoveNext())
yield return e1.Current + e2.Current;
}