-1
votes

Existe-t-il un moyen de diviser un tableau en une matrice multidimensionnelle avec un conditionnel?

J'essaie de "mettre en œuvre une première méthode taille_splitter qui prend deux paramètres: un tableau et un entier (la taille). Nous supposerons que le tableau ne contient que des mots, par exemple des chaînes et que la règle arbitraire est de se former Deux groupes: le premier avec des mots de la taille donnée (deuxième paramètre de la méthode) et l'autre groupe avec tous les autres mots.

La méthode Taille_splitter doit renvoyer une matrice de deux tableaux - les deux groupes définis ci-dessus - avec le contenu trié par ordre alphabétique. " P>

Je peux jusqu'à présent renvoyer la taille de la matrice, mais toute sorte de tri ne fonctionne pas correctement. p>

J'ai essayé de créer 2 tableaux vides et Tous les mots de la matrice principale qui == la taille de la cible passe dans le tableau1 et les autres dans le tableau2. Ensuite, je pousse des matrices 1 et 2 dans le tableau principal. Après cela, je veux retourner les matrices à la fois triés, mais je ne suis pas assez bien suscité de m'inquiéter à ce sujet. P>

def size_splitter(array, size)
  # TODO: Return an array of two arrays, the first containing
  #       words of length `size`, the second containing all the other words
  #       In addition to this split, each array should be *sorted*
  ary1 = []
  ary2 = []
  array.map do |word|
    word.length == size ? ary1.push(word) : ary2.push(word)
    array.push(ary1, ary2)
    return array.sort!
  end
end


2 commentaires

Bonjour Derric-D, vous dites "qui semble être où les premiers problèmes commencent" Pouvez-vous clarifier les problèmes exactement? Ne recevez-vous pas le résultat que vous voulez, et si oui, quel résultat obtenez-vous? Ou avez-vous peut-être une erreur, si oui, partagez-la aussi. En ce moment, on ne sait pas ce que vous demandez.


Oui, mes excuses. Je veux que la méthode prenne une matrice et une taille (ainsi de longueur de l'élément de texte dans la matrice) et triez le tableau en deux sous-tableaux sous la taille donnée. C'est ce que je ne peux pas faire avec le code que j'ai jusqu'à présent et mon principal point de collage. J'essayais simplement d'essayer de trier le tableau principal en deux sous-tableaux avec la même condition en IRB, mais sans succès. Je suis sur mobile mais quand je rentre chez moi, je partagerai mon fichier de spécification de test afin que cela aiderait peut-être plus


4 Réponses :


0
votes

Je vois que vous appelez array.sort. À première vue, je serais sous l'impression que cela tente une tresse sur le tableau parent contenant les matrices que vous êtes réellement intéressé par le tri.

Essayez peut-être p>

array.push(ary1.sort, ary2.sort)
    return array


2 commentaires

Ah, je vois ce que tu veux dire et cela a du sens, mais mon problème principal essaie de trier le tableau en deux sous-tableaux en premier lieu.


On dirait que tu fais ça juste ça. Split alors trier. Il serait agréable de connaître les tailles scindées avant la main, alors vous pouvez trier tout en déplaçant des données à son nouvel endroit, mais cela ne ressemble pas à vous avoir ce luxe.



0
votes

Il semble que le tri de la matrice soit une approche relativement simple.

Je ne pense pas qu'il y a un seul moyen correct de la mettre en œuvre, mais voici une alternative qui ajoute les valeurs à la valeur d'un hachage en fonction de la question de savoir si Ils correspondent à la condition de taille ou non, puis lit les valeurs résultantes. xxx

ceci est également assez lisible: xxx


0 commentaires

4
votes

J'utiliserais Partition Code> pour diviser le tableau et qui trie simplement les sous-bras:

def size_splitter(array, size)
  array.partition { |string| string.size == size }.map(&:sort) 
end


3 commentaires

ok donc j'avais fini avec ce code: DEF Taille_splitter (tableau, taille) ary1 = [] ary2 = [] array.each.ach faire | Word | Word.length == taille? ary1.push (mot): ary2.push (mot) array = [ary1.sort, ary2.sort] End Retour Renvoyer la fin de la fin et il a passé tout mon test mais renvoyé 2 tableaux, même si l'exécutoire via Essayez Ruby Cela fonctionnerait. Votre code passe .. pourquoi est-ce?


Avez-vous lu la méthode DOCS de la partition ? Pourquoi êtes-vous surpris que mon code passe votre test? Qu'est-ce qui ne vous semble pas clair?


Je n'ai pas fait et je ne suis pas surpris que mon code ne passe pas spécifiquement deux tableaux. J'ai réparé que cependant, en retournant [Ary1.sort, Ary2.Sort] au lieu de l'assigner au tableau et à revenir cela, même s'il semblait d'abord passer le test de contenant deux tableaux. Votre code est cristal clair et a du sens, c'est juste que ce que j'avais semblé approprié en dehors de mon test. Cela a probablement lieu avec juste comment je pense cependant que je pense cependant. Merci pensé pour votre aide !! très apprécié



0
votes

Pendant que je considère @spickermann répond à la meilleure approche, je suggérerais une solution pour votre méthode.

Déplacer le retour code> en dehors de la carte code> BOOP, mais utilisez chaque code> à la place, car vous avez défini des tableaux vides pour collecter les éléments. Revenez ensuite les deux tableaux triés: P>

def size_splitter(array, size)
  ary1 = []
  ary2 = []
  array.each do |word|
    word.length == size ? ary1.push(word) : ary2.push(word)
  end
  return [ary1.sort, ary2.sort]
end

ary = %w|Tom Bob Greg Sam Sonny Thomas|

size_splitter(ary, 3)
#=> [["Bob", "Sam", "Tom"], ["Greg", "Sonny", "Thomas"]]


0 commentaires