Supposons que j'ai un tableau à deux dimensions, par exemple comme ceci:Trouver maximum dans une « colonne sage » tableau à deux dimensions
val A1 = Array(Array(4,0,0,0),Array(3),Array(3,4,40,1),Array(50,2))
Maintenant, je voudrais avoir un maximum d'éléments dans chaque position.
Si j'écris le tableau ci-dessus sous la forme de matrice, alors il est évident que je veux dire par « en colonne » maximale:
4 0 0 0
3
3 4 40 1
50 2
----------
50 4 40 1 (result)
La réponse dans ce cas serait Array(50,4,40,1)
(valeurs vides seraient ignorées).
Je peux le faire comme ceci:
A1.foldLeft(A1.head)((x1, x2) =>
x1.padTo(x2.length, Int.MinValue).zip(x2.padTo(x1.length,Int.MinValue)).
map { pair => pair._1 max pair._2 }
)
mais en quelque sorte cela se sent tout à fait hardcore pour une chose simple comme ça. Donc j'apprécierais une manière plus simple de faire ceci.
Peut-être est
1) Certaines fonctions pour le faire directement?
2) Un moyen de faire ce "zipping avec la valeur par défaut": x1.padTo(x2.length, Int.MinValue).zip(x2.padTo(x1.length,Int.MinValue))
mieux?
3) Une autre façon d'améliorer cela?
Nice. Je savais que quelque chose de simple comme ça existerait mais ne pouvait pas le comprendre. Le tri en premier est un peu malheureux cependant. Je soupçonne que la réponse de Giovanni serait beaucoup plus rapide ... peut être faux si – Pekka