J'ai un tableau avec des éléments uniques. Existe-t-il un moyen de remplacer une certaine valeur par une autre valeur sans utiliser sa valeur d'index?
Exemples:
array = [1,2,3,4]
if array.include? 4
# "replace 4 with 'Z'"
end
array #=> [1,2,3,'Z']
hash = {"One" => [1,2,3,4]}
if hash["One"].include? 4
# "replace 4 with 'Z'"
end
hash #=> {"One" => [1,2,3,'Z']}
p array.map { |x| x == 4 ? 'Z' : x }
# => [1, 2, 3, 'Z']
Vous pouvez le faire comme:
array[array.index(4)] = "Z"
Si l'élément n'est pas nécessairement dans le tableau, alors
if i = array.index(4)
array[i] = "Z"
end
Vous pouvez utiliser Array # map
array = array.map do |e|
if e == 4
'Z'
else
e
end
end
pour éditer le tableau en place, plutôt que de créer un nouveau tableau, utilisez Array # map!
Si vous souhaitez remplacer plusieurs éléments, vous pouvez utiliser un hachage pour mapper l'ancien entre l'ancien:
replacements = {
4 => 'Z',
5 => 'five',
}
array = array.map do |e|
replacements.fetch(e, e)
end
Cela utilise une fonctionnalité de Hash # fetch , où si la clé n’est pas trouvée, le deuxième argument est utilisé par défaut.
Une solution très simple qui suppose qu'il n'y aura pas de doublons et que l'ordre n'a pas d'importance:
hash = { 'One' => [1, 2, 3, 4] }
hash['One'].instance_eval { Push 'Z' if delete 4 }