替换数组中的单个元素

时间:2014-10-16 23:10:38

标签: ruby arrays

我有一个包含独特元素的数组。有没有办法用另一个值替换它中的某个值而不使用它的索引值?

示例:

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']}

4 个答案:

答案 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])。