Je cherche un moyen élégant d'obtenir un tableau contenant les valeurs maximales entre deux tableaux.
Signification S'il y a deux tableaux: P>
c = Array.new(a.size) for i in 0...a.size c[i] = [a[i], b[i]].max end
3 Réponses :
Cela devrait fonctionner: sortie p> transpose code> retourne [[[1, 3], [5, 2], [9, 11]] < / Code> et Carte (&: max) code> trouve le maximum de chaque sous-tableau. p> A.zip (b) code> (comme suggéré par Abe VOELKER) est équivalent à [a, b] .transposez code> si les deux tableaux ont le même nombre d'éléments. Si la taille de l'élément diffère, transpose code> augmenterait une exception: p> référence h2>
Mais, avec [A, B] .Transposez code> Vous ne pouvez pas faire un énumérateur paresseux comme vous le pouvez avec zip. Pour les grandes matrices, cela créera un grand nombre de matrices temporaires.
@stefan pouvez-vous faire référence maintenant s'il vous plaît? Vous êtes expert sur lequel je sais :)
Pour une référence future, je veux juste noter que les informations sur zip code> n'étaient pas dans votre réponse lorsque j'ai posté le mien; Votre Ninja Modifier ne s'affiche pas dans l'historique de modification :-) (Je ne veux tout simplement pas que la PPL pense que j'ai copié)
@Abevoelker Ouais, alors ne suit pas chaque changement, j'ai ajouté une référence à votre message.
a.zip(b).map(&:max) # => [3, 5, 11]
Sous Ruby 2.0, vous voudrez peut-être faire un zip paresseux, a.lazy.zip (b) .MAP (&: max) .to_a code> pour un gain de mémoire possible avec d'énormes tableaux (bien qu'à environ 2x Diminution de la vitesse)
Comment est le ci-dessous?
Remarque: em> La taille doit être égale à la fois de la matrice. p> user system total real
Stefan 0.047000 0.000000 0.047000 ( 0.046874)
Abe 0.047000 0.000000 0.047000 ( 0.046873)
babai1 0.031000 0.000000 0.031000 ( 0.031249)
babai2 0.062000 0.000000 0.062000 ( 0.062497)
babai3 0.032000 0.000000 0.032000 ( 0.031249)
Pourquoi pas 9,5, .. i>? valeurs maximales entre deux tableaux i> Quelle est la logique?
@Babai c'est le maximum sage d'élément
Pourquoi ne pas montrer le code que vous avez écrit pour nous faire savoir que vous avez essayé de trouver une réponse vous-même? C'est le chemin du débordement de la pile. "Les questions demandant au code doivent démontrer une compréhension minimale du problème résolu. Inclure les tentatives de solutions, pourquoi elles n'ont pas fonctionné et les résultats attendus. Voir aussi: Liste de contrôle de la pile de dépassement ".