2013-06-18 5 views
10

Co próbuję osiągnąć, to dodać jeden element do listy, wiele razy bez użycia pętli.Dodaj jeden element wiele razy do tej samej listy

Zamierzam dodać 50 numerów do listy i chcę, aby wszystkie te liczby były równe, powiedzmy, 42. Mam świadomość, że mogę po prostu utworzyć małą pętlę, która działa 50 razy i dodaje ten sam element w kółko jako taki;

List<int> listFullOfInts = new List<int>(); 
int addThis = 42; 
for(int i = 0; i < 50; i++) 
    listFullOfInts.Add(addThis); 

Co próbuję zrobić, to coś na linii;

listFullOfInts.AddRange(addThis, 50); 

Albo coś podobnego do tego przynajmniej, może używając Linq? Mam mgliste wspomnienie, jak to zrobić, ale nie jestem w stanie go znaleźć. Jakieś pomysły?

+0

dlaczego nie chcą korzystać z listy? –

+0

@RuneFS, ponieważ tak to mam zaimplementowane :) – Sander

+0

lol Miałem na myśli "Dlaczego nie chcesz używać pętli?". Beats mnie, jak skończyłem pisać coś innego (_eded_ coffee) –

Odpowiedz

32

Można użyć Repeat:

List<int> listFullOfInts = Enumerable.Repeat(42, 50).ToList(); 

Demo

Jeśli masz już listę i nie chcesz, aby utworzyć nowe z ToList:

listFullOfInts.AddRange(Enumerable.Repeat(42, 50)); 
+4

+1 Warto również wspomnieć, że z referencjami zostaną dodane odniesienia do tej samej instancji, a więc modyfikacja któregokolwiek z elementów zmieni inne 49 –

+0

To właśnie tego szukałem! Dzięki! (Oznaczymy jako odpowiedź tak szybko, jak tylko będę mógł). – Sander

+0

Warto również wspomnieć, że będzie to nadal używać pętli, ale nie będzie ona widoczna. –

2

Ty możliwe, Zrób to bezpośrednio z LINQ, ponieważ LINQ jest wolny od efektów ubocznych, ale możesz użyć niektórych z tego, co można znaleźć w przestrzeni nazw System.linq do zbudowania wymaganego.

public static void AddRepeated<T>(this List<T> self,T item, int count){ 
    var temp = Enumerable.Repeat(item,count); 
    self.AddRange(temp); 
} 

można następnie użyć jej jako proponujesz w swoim poście

listFullOfInts.AddRepeated(addThis, 50); 
+1

nie powinno na przykład wywoływać 'listFullOfInts.AddRepeated (addThis, 50)' zamiast 'addRange'? – mz8i

+0

Tak, powinno :) –