2013-06-05 13 views
8

Diciamo:Creare un elenco da un'altra lista

class Plus5 { 
    Plus5(int i) { 
     i+5; 
    } 
} 
List<int> initialList = [0,1,2,3] 

Come posso creare, da initialList, un altro elenco chiamando Plus5() costruttore per ogni elemento di initialList. Qualcosa di meglio di?

List<Plus5> newList = new List<Plus5>(); 
initialList.ForEach(i => newList.Add(Plus5(int))); 
+0

sì, sto costruendo un elenco di Plus5 da una lista iniziale di int –

+0

C'è un motivo per cui vuoi avere un tipo 'Plus5'? Sembra che tu voglia semplicemente creare una nuova lista di 'int' in cui il' ints' capita di essere incrementato di 5 –

+0

è solo per l'esempio –

risposta

8

utilizzare LINQ per aggiungere 5 a ciascun numero nella vostra lista.

var result = initialList.Select(x => x + 5); 
+0

Ottimo, non mi ero reso conto che Select aveva quel potere. –

+0

Dai un'occhiata a questo link http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b. È un ottimo punto di partenza per l'apprendimento di LINQ. – arunlalam

12

Come posso creare, da initialList, un altro elenco chiamando Plus5) costruttore (per ogni elemento del initialList?

Così il risultato è List<Plus5> newList e si desidera creare un nuovo Plus5 per ogni int in initialList: (memoria salva)

List<Plus5> newList = initialList.Select(i => new Plus5(i)).ToList(); 

Se volete micro-optimize:

List<Plus5> newList = new List<Plus5>(initialList.Count); 
newList.AddRange(initialList.Select(i => new Plus5(i))); 
+0

Questa è una risposta corretta. Tuttavia, si consiglia di suggerire una soluzione alternativa in cui è possibile creare un 'Elenco ' tale che il 'ints' capiti di essere incrementato di 5 :) –

+0

@steak: sembra che roughnex abbia già pubblicato tale approccio (almeno 'IEnumerable '). Tuttavia, non è quello che l'OP ha chiesto. –

+0

Sì, questa è la risposta corretta. Grazie, il +5 era solo per l'esempio: D –

1

È possibile utilizzare LINQ come riferimento riportato.

var result = initialList.Select(x => x + 5).ToList(); 

Se tu avessi un metodo (come Plus5), sarebbe simile in modo

int Plus5(int i) 
{ 
    return I + 5; 
} 

var result = initialList.Select(Plus5).ToList(); 
1
List<Plus5> result = new List<Plus5>(InitialList.Select(x=>new Plus5(x)).ToList())); 
+0

Questo non verrà nemmeno compilato. Stai cercando di costruire un 'Elenco ' passando in 'Lista ' come parametro costruttore. –

Problemi correlati