2012-04-23 25 views
60

Creo que esto será bastante trivial, pero no sé cómo hacerlo. Tengo un List<int> y quiero sumar un rango de los números.Rango de suma de int en la lista <int>

decir que mi lista es:

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

¿Cómo puedo obtener la suma de los 3 primeros objetos? El resultado fue 6. Intenté usar Enumerable.Range pero no pude hacerlo funcionar, no estoy seguro si esa es la mejor manera de hacerlo.

Sin hacer:

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

También vea que si incluye System.Linq puede usar muchas otras facilidades con su colección: http://msdn.microsoft.com/en-us/library/system.linq.enumerable.aspx –

Respuesta

99

Esto se puede hacer mediante el uso de Take & Sum:

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

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

Si desea sumar un rango que comienza en otro lugar, puede utilizar Skip:

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

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

O , Reordenar la lista usando OrderBy o OrderByDescending y luego suma:

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

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

Como se puede ver, hay varias maneras de realizar esta tarea (o tareas relacionadas). Consulte Take, Sum, Skip, OrderBy & OrderByDescending documentación para obtener más información.

+1

Perfecto, gracias James. –

+2

increíble solución:] – Somebody

Cuestiones relacionadas