J'essayais des problèmes avec mon tableau de rubis 2D et mon loccule réduit beaucoup lorsque je fais un tableau en tranches. Donc, par exemple,
require "test/unit"
class LibraryTest < Test::Unit::TestCase
def test_box
array = [[1,2,3,4],[3,4,5,6], [5,6,7,8], [2,3,4,5]]
puts array[1][2..3] # 5, 6
puts array[1..2][1] # 5, 6, 7, 8
end
end
4 Réponses :
puts (0..2).collect { |i| array[i][i] }
! La solution est si évidente! Bien fait, bien que j'utilise une matry.Size à la place de 2, car la longueur de la matrice peut différer.
Génial :) cool réponse ... {des trucs magiques?} Est évident dans Ruby
Nice, en fait, j'ai besoin de 2 au lieu de marse.SIZE car cela pourrait être une tranche diagonale diagonale / partielle :)
Le 2 code> ne fonctionne que avec des matrices 3x3: pour toute autre taille utilise array.size-1 code> au lieu de 2 code>
Meilleur pourrait être une doublure qui utilise la bitrengle bibliothèque:
extrait de rubis à base de Obtenez toutes les diagonales dans une matrice / liste des listes de Python
Ceci est pour obtenir toutes les diagonales. Quoi qu'il en soit, l'idée est de renvoyer la matrice de différents côtés afin que les diagonales s'alignent dans les rangées et les colonnes: p>
Je prends la réponse de Shai et propose de la rendre plus fonctionnelle.
Nous initialisons d'abord le tableau: p> alors nous préparons la matrice qui sert le tableau qui sert En tant que rembourrage: p> alors nous appliquons le rembourrage au tableau. Si vous inversez la première utilisation de
le rembourrage ou le second dépend si vous voulez vous rendre à la baisse ou à la hausse
Diagonales. p> Nous transposons comme dans la solution de @ Shai: p>
Vous savez probablement cela, mais
met la matrice [1..2] [1] code> est équivalent àMet Tarray [2] code>, pasmet la matrice [1 .. 2] .map {| ARR | arr [1]} code>. Je ne sais pas si vous utilisez des tableaux de tableaux la bonne façon de faire des choses, mais je n'ai rien pu construire de mieux.C'était mon intention. Mais votre réponse est toujours très utile. Merci :)