2013-06-05 33 views
8

Powiedzmy:Tworzenie listy z innej listy

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

Jak mogę tworzyć, z initialList, innej listy wywołującego Plus5() Konstruktor dla każdego elementu initialList. Coś lepszego niż?

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

Tak, jestem budowy listę Plus5 z początkowej listy int –

+0

Czy istnieje powód, dla którego chcesz mieć typ "Plus5"? Wygląda na to, że możesz po prostu chcieć zbudować nową listę 'int', gdzie' ints' jest zwiększany o 5 –

+0

, tylko dla przykładu. –

Odpowiedz

8

Użyj LINQ, aby dodać 5 do każdego numeru na liście.

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

Wspaniale, nie zdawałem sobie sprawy, że Select dostał tę moc. –

+0

Spójrz na ten link http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b. To świetne miejsce do nauki LINQ. – arunlalam

12

Jak mogę tworzyć, z initialList kolejna lista nazywając Plus5() konstruktora dla każdego elementu initialList?

Więc wynik jest List<Plus5> newList i chcesz utworzyć nową Plus5 dla każdego int w initialList (pamięć ocalić)

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

Jeśli chcesz mikro-Optymalizuj:

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

To jest poprawna odpowiedź. Możesz jednak zasugerować alternatywne rozwiązanie, w którym może utworzyć listę 'ints', która będzie inkrementowana o 5 :) –

+0

@steaks: Wygląda na to, że roughnex już opublikował to podejście (przynajmniej 'IEnumerable '). Jednak nie o to prosił OP. –

+0

Tak, to jest poprawna odpowiedź. Dzięki tobie, +5 było tylko dla przykładu: D –

1

Możesz użyć LINQ jako wzmiankowanego wzmianki.

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

Jeśli miał metodę (jak Plus5), to będzie wyglądać tak

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

To nawet nie skompiluje. Próbujesz zbudować 'List ' przekazując w 'List ' jako parametr konstruktora. –