替换数组中的单个元素

Las*_*nic 14 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']}
Run Code Online (Sandbox Code Playgroud)

Joh*_*son 21

p array.map { |x| x == 4 ? 'Z' : x }

# => [1, 2, 3, 'Z']
Run Code Online (Sandbox Code Playgroud)

  • 如果第一个元素等于4,为什么要遍历整个数组? (5认同)
  • 你怎么知道“4”只在数组中出现一次? (5认同)

saw*_*awa 9

你可以这样做:

array[array.index(4)] = "Z"
Run Code Online (Sandbox Code Playgroud)

如果元素不一定在数组中,那么

if i = array.index(4)
  array[i] = "Z"
end
Run Code Online (Sandbox Code Playgroud)

  • 虽然我同意你的看法,但我认为你的评论有点苛刻. (2认同)

Way*_*rad 5

您可以使用Array#map

array = array.map do |e|
  if e == 4
    'Z'
  else
    e
  end
end
Run Code Online (Sandbox Code Playgroud)

要编辑数组,而不是创建一个新数组,请使用Array#map!

如果您要替换多个内容,可以使用哈希将旧内容映射到新内容:

replacements = {
  4 => 'Z',
  5 => 'five',
}
array = array.map do |e|
  replacements.fetch(e, e)
end
Run Code Online (Sandbox Code Playgroud)

这使得使用Hash #fetch的一个特性,如果找不到该键,则第二个参数用作默认值.

  • @Lasonic然后:`hash['key'].map!做|e| ...结束` (2认同)