2010-09-14 9 views
19

Tengo el siguiente código y estoy tratando de encontrar la forma de multiplicar todos los valores en mi IEnumerable.Multiplicando todos los valores en IEnumerable <int>

Pensé que podría haber un método Multiply como el que hay con Sum. Creo que podría hacer un foreach sobre cada elemento, pero en estos días esto parece tedioso.

¿Alguna sugerencia?

//1:2:6 
string[] pkgratio = comboBox1.SelectedRow.Cells["PkgRatio"].Value.ToString().Split(':'); 
var ints = pkgratio.Select(x => int.Parse(x));   

int modvalue = ints.... 

Respuesta

31

Lo que estamos buscando es la función de agregado

int modValue = ints.Aggregate(1, (x,y) => x * y); 

la función de agregado toma en un valor inicial del acumulador y luego se aplica una operación para todos los valores de la enumeración de crear un nuevo valor del acumulador. Aquí comenzamos con 1 y luego multiplicamos siempre el valor por el valor actual del acumulador.

Nota: En el caso de un valor ints vacío, este devolverá 1. Esto puede o no ser correcto para su situación.

+0

Gracias. Acabo de probar ints.Aggregate (1, (x, y) => x + y); y para 1,2,6 se suman hasta 10. Supongo que es porque agrega 1 para empezar. Sin embargo, multiplicar estará bien? – Jon

+0

@Jon: sí. También puede omitir la semilla por completo y hacer 'enter.Aggregate ((x, y) => x * y)' pero eso generará una excepción si la alimenta con una secuencia vacía. – LukeH

+0

Acabo de probar y arroja una excepción de todos modos, incluso si la semilla está allí en una secuencia vacía – Jon

Cuestiones relacionadas