2011-09-09 40 views
28

Tôi đã gặp phải một vấn đề hoàn toàn giả định cảm thấy như nó có một giải pháp dễ dàng nếu tôi tìm thấy phương pháp linq đúng ...Thêm/tổng hợp hai mảng

Tôi có hai mảng ints và tôi biết chúng là cùng cỡ. Tôi muốn tạo một mảng thứ ba có cùng kích thước trong đó các phần tử trong mảng thứ ba là tổng của các phần tử trong hai mảng đầu tiên ở vị trí tương ứng.

Dưới đây là một phương pháp sẽ hiển thị những gì tôi muốn làm.

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; 
} 

Có bất kỳ phương pháp LINQ mà tôi chỉ có thể sử dụng như

return a.DoStuff(b, (x,y) => x+y) 

hoặc một cái gì đó như thế?

Tôi nên lưu ý rằng điều này có thể rơi vào danh mục bài tập ở nhà vì vấn đề ban đầu đến từ trang web tôi đang xem (mặc dù tôi không thể tìm thấy liên kết trực tiếp đến vấn đề) và không phải là câu hỏi tôi cần làm việc hay gì đó.

Nếu không có phương pháp đơn giản nào tồn tại thì cách Linqy nhất để làm điều này là gì? một số array.each dường như có vấn đề không thể lập chỉ mục mảng thứ hai dễ dàng để thêm giá trị vào mảng mà bạn đang lặp lại thông qua dẫn tôi tự hỏi liệu LINQ có giúp được gì trong hoàn cảnh đó không ...

+1

FYI, điều này thường được gọi là “zip” (tương tự dây kéo nên được rõ ràng) và LINQ không có built-in hỗ trợ cho nó, ngoại trừ có lẽ qua 'SelectMany'./EDIT Rõ ràng không còn đúng trong phiên bản hiện tại. –

+0

Zip những kẻ đã trả lời là avail chỉ trên NET 4 – Zenwalker

+0

@zenwalker: yep và đây là lý do tại sao tốt hơn để nâng cấp phiên bản Framework càng sớm càng tốt, tính năng rất gọn gàng;) – sll

Trả lời

41

Zip nó :)

var a = new int[] {1,2,3 }; 
var b = new int[] {4,5,6 }; 
a.Zip(b, (x, y) => x + y) 
+0

Tuyệt vời, cảm ơn cho hiển thị này! – Austin

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); 
10

Bạn có thể sử dụng phương thức Select.

int[] a = new[] { 1, 2, 3 }; 
int[] b = new[] { 10, 20, 30 }; 

var c = a.Select ((x, index) => x + b[index]).ToArray(); 
+1

Ai sẽ vượt qua và sau đó tăng chỉ mục? – sll

+3

Chỉ số được cung cấp bởi quy trình LINQ. –

+0

Cảm ơn, tính năng tuyệt vời! – sll

4
public static int[] AddArrays(int[] a, int[] b) 

{ 
    return a.Zip(b, (x,y) => x+y).ToArray(); 
} 
Các vấn đề liên quan