Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在一行中合并数组并从旧数组中删除内容_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 在一行中合并数组并从旧数组中删除内容

Ruby on rails 在一行中合并数组并从旧数组中删除内容,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在调用一个方法,希望返回一个合并数组。它在if语句中返回,因此只返回最后一行。我希望它既能合并(通过.concat)@old_array到@new_array,又能删除同一行中@old_array的内容。我该怎么做呢 if test == @good_test @new_array.concat(@old_array) #I want it to return this @old_array = []. #while also deleting this

我正在调用一个方法,希望返回一个合并数组。它在if语句中返回,因此只返回最后一行。我希望它既能合并(通过
.concat
@old_array
@new_array
,又能删除同一行中
@old_array
的内容。我该怎么做呢

    if test == @good_test
      @new_array.concat(@old_array) #I want it to return this
      @old_array = [].   #while also deleting this
  end
您可以使用数组删除由索引和长度或范围给定的元素,并返回从数组中删除的元素:

def do_it(new_array, old_array)
  if true
    new_array.concat(old_array.slice!(0..-1))
  end
end

a = [1, 2]
b = [3, 4]
do_it(a, b) # => [1, 2, 3, 4]
a # => [1, 2, 3, 4]
b # => []
如果您的ruby版本中没有end-less范围,您可以使用
-1
作为结束:

old_array.slice!(0..-1)
在源代码中,看起来它将创建一个新数组,并将所有元素复制到该数组中,然后清除现有数组,然后返回新数组。有效率的不是真的,你问什么?是。

您可以使用数组删除由索引和长度或范围给定的元素,并返回从数组中删除的元素:

def do_it(new_array, old_array)
  if true
    new_array.concat(old_array.slice!(0..-1))
  end
end

a = [1, 2]
b = [3, 4]
do_it(a, b) # => [1, 2, 3, 4]
a # => [1, 2, 3, 4]
b # => []
如果您的ruby版本中没有end-less范围,您可以使用
-1
作为结束:

old_array.slice!(0..-1)

在源代码中,看起来它将创建一个新数组,并将所有元素复制到该数组中,然后清除现有数组,然后返回新数组。有效率的不是真的,你问什么?是。

添加包含返回值的第三行,即
@new\u array
@new\u array,@old\u array=[@new\u array+@old\u array]
您的问题不清楚。您说要“从旧数组中删除内容”,但代码并不是这样做的
@old\u array=[]
不会删除
@old\u array
引用的对象的内容,它会分配一个新数组。@new\u array.concat(@old\u array)@old_array=[]另一种方式-
@new_array.concat(@old_array)。点击{@old_array.clear}
添加包含返回值的第三行,即
@new_array
@new_array,@old_array=[@new_array+@old_array]
您的问题不清楚。您说要“从旧数组中删除内容”,但代码并不是这样做的
@old\u array=[]
不会删除
@old\u array
引用的对象的内容,它会分配一个新数组。@new\u array.concat(@old\u array)@old_array=[]另一种方式-
@new_array.concat(@old_array)。点击{@old_array.clear}