2009-09-18 23 views
6

Estoy tratando de averiguar cuántas veces el valor máximo de una matriz se produce dentro de la matriz mediante el uso de LINQ .Count() con un predicado en el interior. Sin embargo, no entiendo completamente cómo hacerlo. Al leer el escaso ejemplo de MSDN, pensé que lo entendía, ¡pero aparentemente no!Utilizando C# Conde() con una función

Esto es lo que pensaba de:

string[] test = { "1", "2", "3", "4", "4" }; 
string max = test.Max(); 
Label1.Text = test.Count(p => p == max); 

Pero eso no funcionó. Así que traté de cambiar max a un número entero para ver si eso funcionaría, pero tampoco funcionó.

+0

¿Qué quiere decir con "no funciona"? ¿Qué hace y cómo difiere de lo que espera? ¿Recibes algún mensaje de error? – Guffa

+0

Mucho más fácil, ¡salud! – Psytronic

Respuesta

7

usted podría utilizar la función donde filtrar primero y luego contar:

Label1.Text = test.Where(p => p == max).Count().ToString(); 
+2

Agregue un ToString() al final .... – BFree

+0

@BFree: ¡buen punto! – JDunkerley

+6

No ** necesita ** filtrar con 'Donde' primero. 'Count' tiene una sobrecarga que toma un predicado' Func 'y solo cuenta los elementos coincidentes. –

0

intentar algo como:

Label1.Text = test.Where(t => t == test.Max()).Count().ToString(); 
16

usando Count(predicate) está bien. Solo necesita convertir el valor de retorno (que es un número entero) en una cadena.

Label1.Text = test.Count(p => p == max).ToString(); 
2
 int[] test = { 2, 45, 3, 23, 23, 4, 2, 1, 1, 1, 1, 23, 45, 45, 45 }; 
     int count = test.Count(i => i == test.Max()); 

Ahora usted tiene un recuento de lo que es el recuento final. Tiene más sentido con una colección int. Ahora para mostrarlo, puede simplemente llamar a ToString() en conteo.