2010-06-15 2 views

Répondre

21

Depuis tableau implémente IEnumerable vous pouvez simplement faire ceci:

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

Pour les futurs chercheurs, http://stackoverflow.com/a/641565 pour Jagged Arrays ie. 'int [] [] SomeArray = ...;', utilisez 'var Flattened = SomeArray.SelectMany (x => x)' qui agrège les énumérateurs. Ensuite, vous pouvez simplement faire 'Flattened.Max()' par exemple. – HodlDwon

+1

Josh: Corrigez-moi si je me trompe, mais de la façon dont cela me semble, vous copieriez tout le tableau dans un autre tableau aplati simplement pour faire une recherche maximale, ce qui implique d'abord le surcoût de copie, puis un autre O (n) et a donc une complexité globale terrible pour un problème aussi simple. Parfois, l'élégance et la brièveté ne sont pas tout. – Tom

0

Vous pouvez implémenter une liste> et trouver les min et max foreach et les stocker dans une liste, puis vous pouvez facilement trouver Min() et Max() de cette liste de toutes les valeurs dans une liste unidimensionnelle. C'est la première chose qui me vient à l'esprit, je suis moi-même curieux et je vais voir si google peut adopter une approche plus propre.

+0

Comment pourriez-vous même obtenir un tableau à deux dimensions dans une liste en premier lieu? – devuxer

+0

Ah, je pensais aller très loin, maintenant je me rends compte que si vous deviez mettre le tableau dans une liste, vous pourriez utiliser le code pour extraire le MIN/MAX de la même boucle que j'avais imaginée pour peupler les listes. :/a été un long deuil avec pas assez de café: D –

+0

Vous pouvez aplatir le tableau, @devuxer – Zimano

6

Cela semble fonctionner:

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

ici est variante:

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

où aarray est int [, ]

Questions connexes