2010-12-12 4 views
0

J'ai un tableau de hachages qui ressemble à ceci:Comment puis-je trier ce tableau de hachages en utilisant un tableau secondaire de chaînes?

user_array = [<#Hashie::Mash id="1" name="Ben">, <#Hashie::Mash id="2" name="Scott">, <#Hashie::Mash id="3" name="David">] 

Et j'ai aussi un tableau qui contient les ID tirés d'une source externe:

freq_array = ["1","2","2","3","2","3"] 

Je dois utiliser freq_array pour commander user_array , de sorte que l'utilisateur dont l'ID apparaît le plus dans freq_array est le premier dans le. Donc, sur la base freq_array ci-dessus, user_array serait

user_array = [<#Hashie::Mash id="2" name="Scott">, <#Hashie::Mash id="3" name="David">, <#Hashie::Mash id="1" name="Ben">] 

Quelle est la meilleure façon de le faire? Merci d'avoir lu.

EDIT: Le format des hachages user_array est incorrect. Avoir corrigé.

Répondre

5
user_array.sort_by { |user| freq_array.count(user["id"]) * -1 } 
+2

'user_array.sort_by {| utilisateur | -freq_array.count (user ["id"])} ' – Nakilon

+1

c'est plus court;) Je peux aussi le rendre plus lisible:' user_array.sort_by {| user | freq_array.count (utilisateur ["id"])} .reverse' C'est plus lent, mais plus clair ce qui se passe imho – iain

+0

Merci pour les réponses les gars. Le compte fonctionne bien, mais le user_array n'est pas du tout commandé. J'ai réalisé que chaque entrée dans le user_array a l'air légèrement différente de la façon dont j'ai montré dans la question. J'ai modifié la question pour refléter cela. – ben

Questions connexes