J'ai: 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"}]
3 Réponses :
Une option est la mappage ( Si vous souhaitez vous débarrasser des paires avec énumérable #map code> ) Les touches de Art code>: 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"}]
Peut être préférable d'utiliser réduire code> 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 code>?
Modifier avec une réponse pour la demande supplémentaire
Seul un léger changement est nécessaire: voir HASH # Sélectionnez . P> La variable de bloc _ code> (une variable locale valide), qui correspond à la valeur de la clé < Code> k code>, signifie au lecteur qu'il n'est pas utilisé dans le calcul du bloc. Certains préfèrent écrire ce | k, _v | code> ou certains-tel. P> p>
Un moyen simple est la suivante:
Quel est votre code
ht_new = ht.select {| hachage | arr.included? hachage} code> destiné à supporter? Est-ce votre tentative infructueuse? Ou affirmez-vous qu'il renvoie{"test": "abc", "test": "amusement"}} code>, qui est un mensonge, car une paire de clés est comparée àcode>, et en outre, aucune clé dansht code> correspondrearr compte code> sauf si vous convertissez de la chaîne en symbole?Le second
HT code> n'est pas une expression de rubis valide. Votre deuxième question n'est pas non plus claire.