6
votes

Tri des tableaux de tri basés sur la fréquence dans Ruby sur rails

J'ai une gamme imbriquée de chiffres, arrangé comme ceci: xxx

Je n'ai besoin que d'un seul tableau avec toutes les touches à l'intérieur, sans répéter, donc j'ai utilisé ceci: xxx

qui produit ceci: xxx

puisque j'ai utilisé .uniq , il élimine les valeurs dupliquées. Cependant, j'aimerais commander les valeurs basées sur la fréquence à laquelle ils apparaissent dans les sous-tableaux, plutôt que sous la date d'ordre, alors quelque chose comme ceci: xxx


0 commentaires

4 Réponses :


7
votes

Cela devrait faire:

ids.flatten.group_by {|i| i}.sort_by {|_, a| -a.count}.map &:first


9 commentaires

@Qpaystaxes - essayez d'exécuter la commande ci-dessus étape par étape pour voir ce qui se passe. Y a-t-il un élément particulier dont vous n'êtes pas sûr?


Je l'ai essayé mais il dit qu'il y a une erreur de syntaxe là-bas dans certains où et depuis que je suis nouveau dans les rails, je ne reçois pas le code beaucoup et que je ne peux pas voir l'erreur bro


@BroisiSatse je sais ce qui se passe, mais si vous fournissez simplement du code, alors quand quelqu'un a un problème similaire mais non identique, et ne le fait pas l'obtenir, toute la réponse est inutile. Si vous vous expliquez, d'autres peuvent également l'utiliser.


@Fredo - Comment la ligne avec ce code ressemble-t-elle dans votre code? :) Vous devrez peut-être faire carte (et: d'abord) dans certains cas.


@Qpaystaxes - Même si je serais d'accord en général, c'est une tâche assez simple. Si quelqu'un n'est pas sûr de ce que ce code fait, il y a plus de ressources suffisantes sur Internet pour vérifier la méthode donnée et ce site n'est pas le but de ce site de créer une documentation de base de rubis.


Je suis d'accord avec @broisiSatsse ici. Bien que des one-liners soient impressionnants, pour des débutants évidents comme l'OP, les réponses comme les miennes conviennent mieux. :-)


@Humza - En outre, votre réponse a O (n ^ 2) La complexité tandis que toutes les autres réponses sont O (n) . : P


@BroisiSatse je sais! N00B Réponse pour N00B Question: P Sérieusement cependant, les multilignes paient pour aider à expliquer le code aux débutants


Oui! @Humza à vous travaille aussi bien! Mais je ne peux pas marquer les deux aussi correct ... de toute façon merci de vous remercier (tous les deux) ... et oui après avoir lu votre réponse, j'ai un type de code, il s'agit juste que les rails ont une milliard de méthodes ... m Essayer de les apprendre étape par étape: p



3
votes
ids_flatten = [[5,8,10],[8,7,25],[15,30,32],[10,8,7]].flatten
ids_hist = ids_flatten.group_by{ |v| v }.map{ |k, v| [k, v.size] }
soreted_ids_hist = ids_hist.sort_by{|x| -x[1]}

soreted_ids_hist.map(&:first)
 => [8, 7, 10, 25, 5, 15, 30, 32]

0 commentaires

3
votes

lent mais clairement compréhensible (espérons-le) aux personnes nouvelles à Ruby: xxx


0 commentaires

0
votes

probablement pas la meilleure solution, mais: xxx


0 commentaires