Ruby n维数组的数组数学
我的头发都掉光了。我有一个三维数组 初始化为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。你能告诉我我做错了什么吗Ruby n维数组的数组数学,ruby,arrays,Ruby,Arrays,我的头发都掉光了。我有一个三维数组 初始化为Array.new(行){Array.new(列){Array.new(通道,0)} 一切似乎都正常,但当我尝试添加填充列时,我不知道第二维度是如何被破坏的 我已经用了5种不同的方法做了这件事,并且不断地为第二维度想出错误的尺寸。第一部分工作正常,我将数组堆栈_边初始化为1xn像素的数组,并将其推/取消移位到图像_数据的开头和结尾。然后变成并排列0…pads…原始高度…原始高度(pads)行 但是,我尝试将pixexls推到每行的列上并取消移动,得到一
(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)
这就是所谓的“别名错误”。在面向对象语言中,它们往往是一个问题。请让你的问题更简洁。那些正在验证的错误让我发疯。是的,我明白了。我最难得到数组的副本,而不是指向它的指针:)没问题,很乐意帮忙。