2011-09-09 22 views
28

ho riscontrato un problema puramente ipotetica che si sente come esso ha una soluzione facile se trovo il metodo LINQ destra ...Aggiunta/sommando due array

Ho due array di int e so che sono il stessa misura. Voglio creare un terzo array della stessa dimensione in cui gli elementi nel terzo array sono la somma degli elementi nei primi due array nella posizione corrispondente.

Di seguito è riportato un metodo che dovrebbe mostrare ciò che voglio fare.

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

Ci sono metodi Linq che io posso solo usare come

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

o qualcosa del genere?

Devo notare che questo probabilmente rientra nella categoria dei compiti a casa dal momento che il problema originale proveniva da un sito Web che stavo guardando (anche se non riesco a trovare un collegamento diretto al problema) e non come una domanda di cui ho bisogno per lavoro o altro

Se non esiste un metodo semplice, qual è il modo più lineare per farlo? un array.each sembra avere il problema di non essere in grado di indicizzare facilmente il secondo array per aggiungere i valori a quello che si sta iterando, portandomi a chiedermi se Linq sarebbe di alcun aiuto in quella situazione ...

+1

FYI, questo di solito è chiamato “zip” (l'analogia cerniera dovrebbe essere ovvio) e LINQ non ha il supporto incorporato per esso, tranne forse tramite 'SelectMany'./EDIT Apparentemente non è più vero nella versione attuale. –

+0

Zip questi ragazzi hanno risposto è inutilmente solo su .NET 4 – Zenwalker

+0

@zenwalker: sì, e questo è il motivo migliore per l'aggiornamento Framework versione più breve tempo possibile, le caratteristiche molto ordinato sono;) – sll

risposta

41

Zip it :)

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

impressionanti, grazie per mostrare questo! – 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

è possibile utilizzare il metodo Select.

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

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

Chi passerà e quindi incrementerà l'indice? – sll

+3

L'indice è fornito dal processo LINQ. –

+0

Grazie, bella funzionalità! – sll

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

{ 
    return a.Zip(b, (x,y) => x+y).ToArray(); 
}