2012-04-23 12 views
60

Sądzę, że to będzie dość banalne, ale nie mogę się dowiedzieć, jak to zrobić. Mam List<int> i chcę podsumować zakres liczb.Zakres sum int jest na liście <int>

Say moja lista:

var list = new List<int>() 
{ 
    1, 2, 3, 4 
}; 

Jak uzyskać sumę pierwszych 3 obiektów? Wynik to 6. Próbowałem używać Enumerable.Range, ale nie mogłem go uruchomić, nie jestem pewien, czy jest to najlepszy sposób na zrobienie tego.

Bez robi:

int sum = list[0] + list[1] + list[2]; 
+0

Proszę również zauważyć, że jeśli dołączysz System.Linq, możesz korzystać z wielu innych urządzeń z kolekcją: http://msdn.microsoft.com/en-us/library/system.linq.enumerable.aspx –

Odpowiedz

99

Można tego dokonać za pomocą Take & Sum:

var list = new List<int>() 
{ 
    1, 2, 3, 4 
}; 

// 1 + 2 + 3 
int sum = list.Take(3).Sum(); // Result: 6 

Jeśli chcesz zsumować szereg rozpoczynające gdzie indziej, można użyć Skip:

var list = new List<int>() 
{ 
    1, 2, 3, 4 
}; 

// 3 + 4 
int sum = list.Skip(2).Take(2).Sum(); // Result: 7 

Lub , Uporządkować listę używając OrderBy lub OrderByDescending a następnie sumę:

var list = new List<int>() 
{ 
    1, 2, 3, 4 
}; 

// 3 + 4 
int sum = list.OrderByDescending(x => x).Take(2).Sum(); // Result: 7 

Jak widać, istnieje wiele sposobów wykonania tego zadania (lub zadań związanych). Więcej informacji można znaleźć w dokumentacji: Take, Sum, Skip, OrderBy & OrderByDescending.

+1

Perfect, thanks James. –

+2

niesamowite rozwiązanie:] – Somebody