Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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 n维数组的数组数学_Ruby_Arrays - Fatal编程技术网

Ruby n维数组的数组数学

Ruby n维数组的数组数学,ruby,arrays,Ruby,Arrays,我的头发都掉光了。我有一个三维数组 初始化为Array.new(行){Array.new(列){Array.new(通道,0)} 一切似乎都正常,但当我尝试添加填充列时,我不知道第二维度是如何被破坏的 我已经用了5种不同的方法做了这件事,并且不断地为第二维度想出错误的尺寸。第一部分工作正常,我将数组堆栈_边初始化为1xn像素的数组,并将其推/取消移位到图像_数据的开头和结尾。然后变成并排列0…pads…原始高度…原始高度(pads)行 但是,我尝试将pixexls推到每行的列上并取消移动,得到一

我的头发都掉光了。我有一个三维数组

初始化为Array.new(行){Array.new(列){Array.new(通道,0)}

一切似乎都正常,但当我尝试添加填充列时,我不知道第二维度是如何被破坏的

我已经用了5种不同的方法做了这件事,并且不断地为第二维度想出错误的尺寸。第一部分工作正常,我将数组堆栈_边初始化为1xn像素的数组,并将其推/取消移位到图像_数据的开头和结尾。然后变成并排列0…pads…原始高度…原始高度(pads)行

但是,我尝试将pixexls推到每行的列上并取消移动,得到一个认为比实际宽的数组。它报告的宽度比原始图像宽110像素。我不知道其他100个像素是从哪里来的。他们不在那里,从来没有注意过,因为我用计算而不是询问。(旧的_宽度+2*pad_s)工作正常,所有数据似乎都已就位,但宽度=@image_data[row]。大小,以110像素的大小取消。我猜这是因为我推的像素是一个10x1的阵列,我把5个放在前面,5个放在后面,所以用一些奇怪的数学计算是110。你能告诉我我做错了什么吗

  (0...pad_s).each {
    @image_data.unshift(stack_edge)
    @image_data.push(stack_edge)
  }
  self.rows=@image_data.size
  edge=Array.new(image_data[0][0].size)

  a='whats up'
  (0...@image_data.size).each { |i|
      (0...pad_s).each{
        @image_data[i].unshift(edge)
        @image_data[i].push([edge)
      }
  }

您在
@image\u data
的正面和背面分别按下/取消移动相同的
堆栈边缘
数组5次和5次。因此,当您运行
@image\u data
并在
@image\u data
中的每个数组上推/取消移动10条“边”时,这10条边将被添加到
堆栈边
10次。因为相同的
堆栈_边
出现在
@image_数据
中的10个不同位置。明白了吗

您需要的是:

@image_data.unshift(stack_edge.dup)
@image_data.push(stack_edge.dup)

这就是所谓的“别名错误”。在面向对象语言中,它们往往是一个问题。

请让你的问题更简洁。那些正在验证的错误让我发疯。是的,我明白了。我最难得到数组的副本,而不是指向它的指针:)没问题,很乐意帮忙。