我有一个包含独特元素的数组。有没有办法用另一个值替换它中的某个值而不使用它的索引值?
示例:
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']}
答案 0 :(得分:16)
p array.map { |x| x == 4 ? 'Z' : x }
# => [1, 2, 3, 'Z']
答案 1 :(得分:10)
你可以这样做:
array[array.index(4)] = "Z"
如果元素不一定在数组中,那么
if i = array.index(4)
array[i] = "Z"
end
答案 2 :(得分:5)
您可以使用Array#map
array = array.map do |e|
if e == 4
'Z'
else
e
end
end
要编辑数组,而不是创建新数组,请使用Array#map!
如果您想要替换多个内容,可以使用哈希将旧内容映射到新内容:
replacements = {
4 => 'Z',
5 => 'five',
}
array = array.map do |e|
replacements.fetch(e, e)
end
这样可以使用Hash#fetch的特征,如果找不到该键,则第二个参数将用作默认值。
答案 3 :(得分:4)
一个非常简单的解决方案,假设没有重复,订单无关紧要:
hash = { 'One' => [1, 2, 3, 4] }
hash['One'].instance_eval { push 'Z' if delete 4 }
instance_eval
在传递给它的块的持续时间内将self
的值设置为接收者(在本例中为数组[1,2,3,4]
)。