108 votes

Compréhension de liste en Ruby

Pour faire l’équivalent de compréhensions de liste Python, j’ai fais ce qui suit :

Y a-t-il une meilleure façon de le faire... peut-être avec un appel de méthode ?

101voto

glenn mcdonald Points 8933

Comment ' bout :

Un peu plus propre, au moins à mon goût et selon un point de référence rapide test environ 15 % plus rapide que votre version...

59voto

Robert Gamble Points 41984

Si vous voulez vraiment, vous pouvez créer un tableau #comprehend méthode comme suit :

Tirages :

Je le ferais probablement juste la façon dont vous l’avez bien fait.

34voto

knuton Points 865

J’ai fait un rapide benchmark comparant les trois solutions de rechange et carte-compact semble vraiment être la meilleure option.

Test de performances (Rails)

Résultats

12voto

jvoorhis Points 181

J'ai discuté de ce sujet avec la Rêne Henrichs, qui me dit que la solution la plus performante est la carte { ... }.compact. Cela fait du sens parce qu'elle évite de construction intermédiaire des Tableaux (comme avec les lois immuables de l'utilisation de Énumérable#injection), et il évite la culture de la Matrice, ce qui provoque l'allocation. Il est aussi général que toutes les autres, à moins que votre collection peut contenir néant éléments.

Je n'ai pas comparé avec .sélectionnez {...}.carte{...}. Il est possible que Ruby C mise en œuvre de Énumérable#select est très bon aussi.

9voto

Pedro Morte Rolo Points 5171

solution de rechange qui fonctionnera dans toute mise en oeuvre et exécuter en o (n) au lieu de O(2n) temps.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X