J'ai une collection de hash:
Quelle syntaxe serai-je utiliser pour remplacer la première occurrence de la clé code> avec la collecte de hachage Par exemple, ma chaîne d'entrée:
La chaîne résultante serait:
my_hash = {"1" => "Apple", "2" => "abeille", "3" => "CAT"} P> P> P> P> P> P>
valeur code> dans une chaîne? p>
str = je veux un 3 code> p>
str = je veux un chat code> p>
8 Réponses :
Vous pouvez utiliser string.sub A> dans Ruby 1.9: string.sub(key, hash[key])
@Oleksi Vous voulez dire hash code> pas hachage [clé] code> ie my_hash = {"1" => "Apple", "2" => "abeille", "3" = > "cat"} my_str = 'je veux un 3' met mon_str.sub ('3', my_hash) # => 'Je veux un chat'
Je n'ai pas compris votre problème, mais vous pouvez essayer ceci: : d p> p>
IMHO C'est un peu surchargé.
Heh, j'aime celui-ci pour tourner la tête à l'envers. (J'avais +1 vous, mais je suis dehors pour la journée.;)
Ma doublure: ou en utilisant string # SUB! code> Méthode: p> hash.each { |k, v| str.sub!(k, v) }
+1 (quand j'obtiens les votes) pour l'utilisation de chaîne # [] = code> et & = code>.
Quelqu'un peut-il expliquer ce qu'est la première doublure?
Comme les opérateurs booléens de Ruby sont courts-circuits, le deuxième argument est évalué si et seulement si le premier est vrai. La chaîne # [] code> si elle a donné la chaîne, il le trouve et renvoie la référence sous-chaîne. Donc, si nous vous attribuons quelque chose, nous allons changer une partie de la chaîne. Enfin, nous le rejoignons ensemble et si la sous-chaîne est trouvée dans la chaîne, puis remplacez-la avec la valeur de hachage.
Lukasz, beau travail. Une correction: vous devez utiliser le 'SUB!' méthode plutôt que la méthode «sous» pour que votre deuxième exemple fonctionne. 'sous!' modifie la chaîne en place. (Ou utilisez 'gsub!' Pour remplacer toutes les occurrences i> de la correspondance dans la chaîne.)
Juste pour ajouter du point de style libre Abuse à la réponse de FL00R:
my_hash = {"1" => "apple", "2" => "bee", "3" => "cat"}
my_hash.default_proc = Proc.new {|hash, key| key}
str = "I want a 3"
str.gsub(/[[:word:]]+/).each(&my_hash.method(:[]))
str.sub /[0-9]+/, my_hash
Assumant Ruby 1.9 ou version ultérieure:
str.gsub /\d/, my_hash
"I want a %{b}" % {c: "apple", b: "bee", a: "cat"}
=> "I want a bee"
Le code suivant Remplacez la première occurrence de la touche code> avec la collection code> de la valeur code> dans la chaîne donnée str code>
Cela améliorerait la qualité de votre réponse si vous pouviez fournir davantage une explication de votre code. Pourquoi quelqu'un devrait-il essayer votre code, existe-t-il quelque chose qui peut les aider à comprendre ce qu'ils doivent faire?
Explication ajoutée
Quelles sont les hypothèses sur la chaîne d'entrée? Généralement, des langages de modèle comme celui-ci marquent d'une manière ou d'une autre, comme
str = je veux un {3} code> (formatage de chaîne .NET).Le débordement de la pile n'est pas "Veuillez coder cela pour moi"; Quel est votre code jusqu'à présent? Quelles sont vos questions?
... Apparemment je me trompe. Comme en témoigne ci-dessous, nous sommes tous aussi désespérés d'aider à remettre le code à de nouveaux utilisateurs. Bienvenue dans le débordement de la pile! ;)
J'utiliserais la fonctionnalité de modèles de chaîne intégrée de Ruby 2.0 si possible. Compte tenu d'un hachage avec des touches de symboles,
H = {PET: "CAT"} CODE> Vous pouvez le faire:"Je veux un% {animal}"% h # => "Je veux un chat " code>