dire que j'ai ceci: et je veux me retrouver avec: p> Quelle est la meilleure façon de le faire ? p> p>
5 Réponses :
Tout d'abord, je pense que la structure de sortie de nettoyage ici est de permettre aux identifiants de l'utilisateur les touches de hachage et la liste des identifiants de recherche sont les valeurs:
output = {}
input.each do |row|
key = row[:user_id]
value = row[:search_id]
output[key] ||= []
output[key] << value
end
Exigence très étrange en effet. Quoi qu'il en soit
Je suis d'accord avec la représentation de matchs des données et je veux simplement suggérer une version plus courte pour elle (entrée étant le tableau initial). EDIT: Ceci est Ruby> 1.9 P > p>
array.group_by{|x| x[:user_id] }.values.map do |val|
{ user_id: val.first[:user_id],
search_id: val.inject([]){|me, el| me << el[:search_id]} }
end
input.inject({}) do
|m, h| (m[h[:user_id]] ||= []) << h[:search_id]; m
end.inject([]) { |m, (k, v)| m << { :user_id => k, :search_id => v }; m }