我已经失去了所有头发。我有一个三维数组。
初始化为Array.new(rows){Array.new(columns){Array.new(CHANNELS,0)}}
一切似乎都有效,但是当我尝试添加填充列时,我无法弄清楚第二维如何被破坏。
我已经用5种不同的方式做到了这一点,并且继续为第二维提出错误的尺寸。第一部分工作正常,我将一个数组stack_edge初始化为一个1xn像素的数组,然后将其推/解到image_data的开头和结尾。然后变成和阵列0 ...填充...原始高度... original_height_2 * pad)行。
然后我尝试推动&将每个行的列异步移动到每行的列上,得到一个认为它比它宽的数组。它报告的宽度比原始宽度宽110像素。我无法弄清楚其他100个像素来自哪里。他们不在那里,从来没有注意过,因为我计算它而不是审问它。 (old_width + 2 * pad_s)工作,所有数据都显示在原位,但width = @image_data [row] .size,以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)
}
}
答案 0 :(得分:0)
您正在推动/取消相同的 stack_edge
阵列5次,而@image_data
背面5次。因此,当您在@image_data
中运行@image_data
并将10个“边缘”推/卸到stack_edge
中的每个数组上时,这10个边将被添加到stack_edge
10次。因为同一@image_data
出现在@image_data.unshift(stack_edge.dup)
@image_data.push(stack_edge.dup)
的10个不同位置。得到它?
您需要的是:
{{1}}
这就是所谓的“别名错误”。它们往往是OO语言的一个问题。