0
votes

En rubis, de manière idiomatique et proprement et proprement sur cette utilisation de Split and Map pour activer l'entrée de chaîne sur un tableau 2D Int (I.e. une matrice)

Je soupçonne qu'il y a une puissance plus propre, plus idiomatique, de Ruby-Way pour résoudre ce casse-tête que ce que j'ai fait. Je suis trop nouveau à Ruby, cependant, pour confirmer. Toutes mes recherches n'ont pas abordé la question de savoir comment écrire de rubis dans les exemples que je donne ci-dessous.

Le puzzle, est-ce que je dois prendre une entrée de chaîne et la transformer en matrice. Les lignes sont séparées par '\ n' , les éléments de ligne sont séparés par '' '

E.g. L'entrée de chaîne "2 6 4 \ n7 9 8" a une sortie [[2, 6, 4], [7, 9, 8]] I.e. la matrice: xxx

c'est ma solution: xxx

explication de ce qui se passe

  1. "2 6 4 \ n7 9 8" => divisé par nouvelle ligne => ["2 6 4", "7 9 8"]
  2. Carte sur des éléments de 1. Pour scinder par '' => [["2", "6", "4"], "4", "9", "8"]]
  3. Carte sur les éléments de 2. Pour devenir INT S (Cela se produit une fois pour chaque ligne)
  4. fin. Nous avons le résultat que nous sommes après

    Je me sens comme ce code n'est pas très lisible, mais je viens de rouille, donc je ne suis pas habitué au bon style

    Je ne suis pas assez familier avec Ruby pour comprendre bonnes façons d'écrire ce type de solutions. J'ai essayé d'utiliser plus de lignes comme si xxx

    mais je me sens toujours laissé dans le noir sur ce qui pourrait être considéré comme un bon style, ou quelles autres options sont disponibles.

    L'exactitude du code va bien. Pour moi, une bonne réponse est une bonne réponse qui me donnera un aperçu de ce qu'il faut rechercher lors de la plongée dans des problèmes similaires à l'avenir et d'avoir plus de confiance en ma compréhension de ce qui fait du code rubis élégant.

    Modifier des réponses Suggestions jusqu'à présent

    • Utilisez Par défaut pour Split
    • Utilisez les valeurs par défaut sur la carte
    • Utilisez DO-fin (je vais encore apprendre). Si quelqu'un veut éditer cela, fantastique.

      C'est ce que j'ai fini avec: @rows = in_string.split (/ \ n /). Carte (| CHRS | chrs.split.map (&: to_i))


0 commentaires

4 Réponses :


0
votes

Votre code me semble bien.

in_string.split(/\n/).map { |row| row.split.map(&:to_i) }


2 commentaires

Merci! Ce sont goo. Je ne connais pas do-fin , mais je suis sûr que je peux le comprendre


Oui, mais cela ne supprime pas le \ n . Je ne sais pas



0
votes

Je pense que c'est assez bon. Si vous pensez que le bloc imbriqué n'est pas bon à lire. Vous pouvez définir une méthode comme xxx

BTW, mieux utiliser finalement dans le bloc multiline


2 commentaires

C'est le premier que j'ai entendu parler de finalement . Est-ce l'une des choses qui peuvent facilement être trouvées ou vaut-elle la peine de demander un exemple?


@Benph, il y a des guides de style rubis dans github, comme cet Github.com/airbnb/Ruby#Syntax. "Évitez d'utiliser {...} pour les blocs multilignes"



0
votes

Ruby a beaucoup de commodité intégrées pour "lisibilité propre", par exemple

  • Les arguments par défaut à chaque_line et divisés
  • symboles avec le .TO_PROC raccourci, & xxx

0 commentaires

0
votes
str = "2 6 4\n7 9 8\n"

arr = str.split.map(&:to_i)
  #=> [2, 6, 4, 7, 9, 8]
arr.each_slice(arr.size/str.lines.size).to_a
  #=> [[2, 6, 4], [7, 9, 8]]

0 commentaires