使用2个参数创建一个在Ruby中修改数组元素的方法,其中一个是原始数组

GVi*_*hua 1 ruby arrays methods

我想创建一个方法,mod_method(array, n)其中array是一个数组,n是一个数字.mod_method应该取数字n并将其添加到所有内部数字array并返回该新数组.

例如,使用array = ["I", "have", 3, "to", 4, "hours"],我将如何找到mod_method(array, 1)这样的

mod_method(array,1)
 => ["I", "have", 4, "to", 5, "hours"]
Run Code Online (Sandbox Code Playgroud)

我是一个菜鸟,只能使用已定义的数组和数字(让我们使用1)来做到这一点,因为:

array = ["I", "have", 3, "to", 4, "hours"]
=>[[0] "I",
  [1] "have",
  [2] 3,
  [3] "to",
  [4] 4,
  [5] "hours"]

numbers = array.values_at(2, 4)
=> [
  [0] 3,
  [1] 4

mod = numbers.map{|x| x + 1}
=> [
  [0] 4,
  [1] 5]
new_array = ["I", "have", mod[0], "to", mod[1], "hours"]
=> ["I", "have", 4, "to", 5, "hours"]
Run Code Online (Sandbox Code Playgroud)

我不知道如何用未定义的参数来做mod_method.

Aru*_*hit 6

把方法写成

def mod_method(array, n)
  array.map { |i| i.is_a?(Fixnum) ? (i + n) : i }
end

array = ["I", "have", 3, "to", 4, "hours"]
mod_method(array, 1) # => ["I", "have", 4, "to", 5, "hours"]
Run Code Online (Sandbox Code Playgroud)

如果您的数组包含两者FixnumFloat实例,并且您希望添加1其中任何一个实例.然后使用以下方法: -

def mod_method(array, n)
  array.map { |i| i.kind_of?(Numeric) ? (i + n) : i }
end

array = ["I", "have", 3.2, "to", 4, "hours"]
mod_method(array, 1) # => ["I", "have", 4.2, "to", 5, "hours"]
Run Code Online (Sandbox Code Playgroud)