2010-06-15 39 views

Respuesta

21

Desde matriz implementa IEnumerable sólo se puede hacer esto:

var arr = new int[2, 2] {{1,2}, {3, 4}}; 
int max = arr.Cast<int>().Max(); //or Min 
+5

Para futuros buscadores, http://stackoverflow.com/a/641565 para Jagged Arrays, es decir. 'int [] [] SomeArray = ...;', use 'var Flattened = SomeArray.SelectMany (x => x)' que agrega los enumeradores. Entonces puedes hacer '' Flatened.Max() 'por ejemplo. – HodlDwon

+1

Josh: corrígeme si me equivoco, pero de la forma en que esto me parece, copiarías toda la matriz en otra matriz aplanada solo para hacer una búsqueda máxima, que en primer lugar incurre en la sobrecarga de copia, y luego otra O (n) y por lo tanto tiene una terrible complejidad general para un problema tan simple. A veces la elegancia y la brevedad realmente no lo es todo. – Tom

0

Puede implementar una Lista> y buscar el mínimo y máximo para todos y almacenarlo en una Lista y luego puede encontrar fácilmente Min() y Máx() de esa lista de todos los valores en una Lista dimensional única. Eso es lo primero que me viene a la mente, tengo curiosidad de esto y voy a ver si google puede tener un enfoque más limpio.

+0

¿Cómo llegarías? una matriz bidimensional en una lista en primer lugar? – devuxer

+0

Ah, pensé en el futuro, ahora me doy cuenta de que si tuviera que poner la matriz en una lista, podría usar el código para sacar el MIN/MAX del mismo bucle que imaginé para completar las Listas. :/ha habido un duelo prolongado sin suficiente café: D –

+0

Puede aplanar la matriz, @devuxer – Zimano

6

Esto parece funcionar:

IEnumerable<int> allValues = myArray.Cast<int>(); 
int min = allValues.Min(); 
int max = allValues.Max(); 
0

aquí es la variante:

var maxarr = (from int v in aarray select v).Max(); 

donde aMatriz es int [, ]

Cuestiones relacionadas