10
votes

Ruby Obtenir les éléments diagonaux dans un tableau 2D

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


2 commentaires

Vous savez probablement cela, mais met la matrice [1..2] [1] est équivalent à Met Tarray [2] , pas met la matrice [1 .. 2] .map {| ARR | arr [1]} . 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 :)


4 Réponses :


18
votes
puts (0..2).collect { |i| array[i][i] }

4 commentaires

! 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 ne fonctionne que avec des matrices 3x3: pour toute autre taille utilise array.size-1 au lieu de 2



9
votes

Meilleur pourrait être une doublure qui utilise la bitrengle bibliothèque: xxx


0 commentaires

3
votes

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: xxx


0 commentaires

1
votes

Je prends la réponse de Shai et propose de la rendre plus fonctionnelle.

Nous initialisons d'abord le tableau: xxx

alors nous préparons la matrice qui sert le tableau qui sert En tant que rembourrage: xxx

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. xxx

Nous transposons comme dans la solution de @ Shai: xxx


0 commentaires