7
votes

Comment trouver et retourner une valeur de hachage dans un tableau de hachage, compte tenu de plusieurs autres valeurs dans le hachage

J'ai ce tableau de hachage: xxx pré>

Comment puis-je rechercher les résultats pour trouver le nombre d'appels facturés sur le 15? p>

Après avoir lu les réponses à " Ruby Easy Search pour la valeur de la clé Paire dans un tableau de hachage ", je pense que cela pourrait impliquer l'expansion de la déclaration suivante: P>

results.find { |h| h['day'] == '2012-08-15' }['calls']


0 commentaires

5 Réponses :


0
votes

une implémentation vraiment maladroite;)

def get_calls(hash,name,date) 
 hash.map{|result| result['calls'].to_i if result['day'] == date && result["name"] == name}.compact.reduce(:+)
end

date = "2012-08-15"
name = "Bill"

puts get_calls(results, name, date)
=> 8 


2 commentaires

Vous pouvez utiliser @ arun32 version si vous êtes sûr que vous n'avez qu'un seul enregistrement par combinaison


Je n'ai qu'un seul disque par combo. Merci.



15
votes

Vous êtes sur la bonne voie! xxx


2 commentaires

J'avais essayé une virgule là-bas auparavant, mais votre et fonctionne parfaitement! Merci beaucoup.


@ S2T2 Vous pouvez également utiliser && instad si et



1
votes
results.select { |h| h['day'] == '2012-08-15' && h['name'] == 'Bill' }
  .reduce(0) { |res,h| res += h['calls'].to_i } #=> 8

0 commentaires

0
votes

En réalité, "réduire" ou "injject" est spécifiquement pour cette opération exacte (pour réduire le contenu d'une diminution d'une valeur unique en une valeur unique:

results.reduce(0) do |count, value|
  count + ( value["name"]=="Bill" && value["day"] == "2012-08-15" ? value["calls"].to_i : 0)
end


0 commentaires

0
votes

ou une autre manière possible, mais un peu pire, en utilisant injecter: xxx

Notez que vous devez définir numéros_of_calls dans chaque itération, sinon cela ne fonctionnera pas, par exemple cela ne fonctionne pas. : xxx


0 commentaires