0
votes

Comment trouver la plus grande valeur d'un hachage dans un tableau de hachages

Dans mon tableau, j'essaie de récupérer la clé avec la valeur la plus importante de "valeur_2". Dans ce cas, "B":

"comparison of Hash with Hash failed (ArgumentError)".  


4 commentaires

Savez-vous que myARRAY contient un seul élément qui est un autre tableau. Et que la matrice intérieure contient un seul hachage avec trois clés et d'autres hachages en tant que valeurs. Est-ce vraiment la structure que vous voulez?


Comme @stefan a mentionné, vous devriez peut-être examiner votre structure: myarray.size # => 1 . Il contient simplement un hachage: myarray.first # => {"A" => {"value_1" => 30, "value_2" => 240}, "B" => {"value_1" => 40, "Value_2" => 250}, "C" => {"value_1" => 18, "value_2" => 60}}


Remarque: Ruby est une langue et des lettres majuscules sensibles à la casse ont une signification spécifique en termes de syntaxe. Les variables et les noms de méthodes doivent être des lettres minuscules. Les capitales indiquent des constantes de la forme classname ou constante_name .


La structure de myarray est suspecte. Un tableau de hachages où chaque clé de hachage est différente aurait dû être un hash / hachage composé de hachage. Votre question devrait vraiment veiller à la manière de rassembler les données et de créer la variable. " Quel est le problème XY? " explique. Une fois que les données sont sur la bonne forme, il est facile de faire plus avec elle.


5 Réponses :


0
votes

code xxx

sortie xxx


2 commentaires

Pourquoi pop ici? Qui endommage le tableau.


Veuillez utiliser des espaces blancheurs appropriés entre vos accolades, vos opérateurs, etc. La lisibilité est très importante lorsque vous codez, pour votre avenir et ceux qui pourraient hériter du code. Les guides de style pour les langues discutent de cela, y compris de Ruby's, par exemple " Espaces et opérateurs ». "Toujours le code comme si le gars qui finit par maintenir votre code sera un psychopathe violent qui sait où vous vivez. Code de lisibilité." - John Woods



0
votes

Je suppose que l'idée de votre solution boucle à travers chaque élément de hachage et comparez la valeur minimale trouvée avec hachage ["value_2"] .

Mais vous obtenez une erreur à xxx

car le array_hash.values ​​ est toujours un hash xxx < / Pré>

Il devrait être comme ceci: xxx

une autre solution: xxx


1 commentaires

"Magical" Les nombres faibles comme ceux qui sont souvent un problème. Il est préférable d'utiliser nil pour indiquer "no max" ou choisir une valeur au hasard dans la liste afin que vous sachiez que pourrait être le max.



1
votes

Bien que équivalent, la matrice donnée dans la question est généralement écrite: xxx

Nous pouvons trouver la clé souhaitée comme suit: xxx

Voir Enumérable # max_by . Les étapes sont les suivantes: xxx

dans le calcul g , pour xxx

Le calcul du bloc est xxx


Supposons maintenant Arr est comme suit: xxx

et nous souhaitons Pour renvoyer une matrice de toutes les clés pour lesquelles la valeur de "valeur_2" est maximale ( ["B", "D"] ). Nous pouvons obtenir cela comme suit. xxx

plat_map (&: clés) sténographie pour: xxx

qui retourne le même tableau que: xxx

voir énumérable # plat_map .


0 commentaires


0
votes

Vous avez demandé "Qu'est-ce que je manque?".

Je pense qu'il vous manque une bonne compréhension des structures de données que vous utilisez. Je vous suggère d'essayer d'imprimer les structures de données et d'examiner attentivement les résultats.

Le moyen le plus simple est p myarray qui donne: xxx < / Pré>

Vous pouvez obtenir des résultats plus jolis à l'aide de pp : xxx

rendements: xxx

Cela vous aide à voir que myarray n'a qu'un seul élément, un hachage.

Vous pouvez également consulter l'expression array_hash.values.max À l'intérieur de la boucle: xxx

donne: xxx

pas ce que vous attendiez? : -)

étant donné cela, que vous attendriez-vous à être retourné par array_hash.values.max dans la boucle ci-dessus?

Utilisez p et / ou pp libéralement dans votre code rubis pour aider à comprendre ce qui se passe.


0 commentaires