0
votes

Comment vérifier si les touches de hachage correspondent à la valeur du tableau

J'ai: xxx pré>

Comment puis-je sélectionner les valeurs dans ht code> dont la touche correspond arr code>? p>

arr = ["abc", "123"]
ht = [{"key": "abc", "value": "test"}, {"key": "123", "value": "money"}, {"key": "doremi", "value": "rain"}}]
output # => [{"key": "abc", "value": "test"}, {"key": "123", "value": "money"}]


2 commentaires

Quel est votre code ht_new = ht.select {| hachage | arr.included? hachage} destiné à supporter? Est-ce votre tentative infructueuse? Ou affirmez-vous qu'il renvoie {"test": "abc", "test": "amusement"}} , qui est un mensonge, car une paire de clés est comparée à , et en outre, aucune clé dans ht correspondre arr compte sauf si vous convertissez de la chaîne en symbole?


Le second HT n'est pas une expression de rubis valide. Votre deuxième question n'est pas non plus claire.


3 Réponses :


2
votes

Une option est la mappage ( énumérable #map code> ) Les touches de Art code>: xxx pré>

Si vous souhaitez vous débarrasser des paires avec nil code > Valeur: P>

ht.select{ |h| h if h.values.any? { |v| arr.include? v} }
# or
arr.map { |e| ht.find { |h| h.values.any?{ |v| v == e } } }

#=> [{:key=>"abc", :value=>"test"}, {:key=>"123", :value=>"money"}]


3 commentaires

Peut être préférable d'utiliser réduire ici car op ne veut pas que les clés ne soient pas trouvées dans le tableau


@maxpleaner merci je vois. J'ai ajouté un moyen de rejeter la valeur nulle. Mais je ne sais pas comment avec réduire ?


Modifier avec une réponse pour la demande supplémentaire



4
votes

Seul un léger changement est nécessaire: xxx

voir HASH # Sélectionnez .

La variable de bloc _ (une variable locale valide), qui correspond à la valeur de la clé < Code> k , signifie au lecteur qu'il n'est pas utilisé dans le calcul du bloc. Certains préfèrent écrire ce | k, _v | ou certains-tel.


0 commentaires

1
votes

Un moyen simple est la suivante: xxx


0 commentaires