2010-12-12 2 views
0

내가 다음과 같습니다 해시의 배열을 가지고 :어떻게하면 문자열의 보조 배열을 사용하여 해시의 배열을 정렬 할 수 있습니까?

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

그리고 나는 또한 ID를 외부 소스에서 가져온 포함 된 배열을 가지고 :

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

내가 user_array을 주문 freq_array를 사용해야합니다, 그래서 ID가 freq_array에서 가장 많이 나타나는 사용자는 user_array에서 첫 번째입니다. 따라서 위의 freq_array을 기반으로 user_array

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

이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 읽어 주셔서 감사합니다.

편집 : user_array 해시의 형식이 잘못되었습니다. 수정했습니다.

답변

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

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

+1

그 길이가 더 짧습니다;) 나는 그것을 더 읽기 쉽게 할 수 있습니다 :'user_array.sort_by {| user | freq_array.count (user [ "id"])} .reverse' 그것은 느리지 만 imho에서 무슨 일이 일어나는지 더 명확합니다. – iain

+0

답변을 주셔서 감사합니다. 개수가 정상적으로 작동하지만 user_array가 실제로 주문되지 않았습니다. user_array의 각 항목이 실제로 내가 질문에서 보여준 것과 약간 다르게 보임을 깨달았습니다. 나는 그것을 반영하기 위해 질문을 편집했다. – ben

관련 문제