【问题标题】:replacing the value of an element in an array without creating a new array在不创建新数组的情况下替换数组中元素的值
【发布时间】:2021-09-28 20:41:23
【问题描述】:

我正在学习 Ruby,并且一直在通过解决 Codewars 和 Leetcode 上的问题来练习。我在 Leetcode 中遇到过这个问题,它要求我在给定一个数组和一个值的情况下,通过删除数组中给定值的出现来修改数组。很简单!我能够解决它——但是,这奇怪的事情发生了,我不知道为什么! 这是我的代码:

def remove_element(nums, val)
  nums.each_with_index do |num, index|
      if num == val
          nums[index] = nil
      end
  end
    nums.compact!
    nums.length
end

你可以在这里看到我在第 4 行写了“nums[index] = nil”,这对我来说效果很好。然而,在很长一段时间里,我一直试图通过写“num = nil”来解决这个挑战。对我来说没有意义的是,为什么“nums [index]”有效而不是“num”?他们指的不是同一个东西吗?

【问题讨论】:

  • num 是块局部变量,nums 是数组。修改本地参数与访问引用不同。再举一个例子,假设数组中填充了对象。 num.some_property = 5 会修改数组条目的属性,num = SomeNewObject.new 只会创建一个新对象而不修改数组条目。如果你调用一个函数也会发生同样的事情。

标签: arrays ruby


【解决方案1】:

Answer 来自Dave Newton

num 是块局部变量,nums 是数组。修改本地参数与访问引用不同。再举一个例子,假设数组中填充了对象。 num.some_property = 5 会修改数组条目的属性,num = SomeNewObject.new 只会创建一个新对象而不修改数组条目。如果你调用一个函数,也会发生同样的事情。

【讨论】:

    猜你喜欢
    • 2019-08-13
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多