Arrays Ruby,从多维数组中删除元素(片)

Arrays Ruby,从多维数组中删除元素(片),arrays,ruby,multidimensional-array,slice,Arrays,Ruby,Multidimensional Array,Slice,(使用Ruby时非常新) 我可以从一维数组中删除一块元素 array1D = Array.new(6){|i| i*i} array1D.slice!(2,2) #=> [1, 16, 25] len = array1D.length #=> 4 但是, 数组(arrayd3d[0][0])。切片!(30000880) 在arrayd3d[1][1][38884]上 我还是会 len = array3D.length #=> 38884 1) 我做错了什么 2) 如何从

(使用Ruby时非常新) 我可以从一维数组中删除一块元素

array1D = Array.new(6){|i| i*i}
array1D.slice!(2,2) #=> [1, 16, 25]
len = array1D.length #=> 4 
但是,

数组(arrayd3d[0][0])。切片!(30000880)

在arrayd3d[1][1][38884]上

我还是会

len = array3D.length #=> 38884 
1) 我做错了什么

2) 如何从所有文件中删除相同的元素块(30000880) arrayd3d[1..nDim1][1..nDim2]?

返回已删除的对象:

a = [ "a", "b", "c" ]
a.slice!(1)     #=> "b"
a               #=> ["a", "c"]
一般来说,在ruby中,我们不希望更改原始对象,除非我们希望获得某些特定的性能增益(非常罕见,例如,在继续之前,您可能希望减少非常大的数组的内存消耗)

这就是感叹号(
aka
bang
)通常表示某种破坏性行为的原因

请考虑使用非Bang-Veluy版本。

Array.new(6){ |i| i*i }
y = array1D.slice(2,2)

or

def some_method(input_array)
  input_array.slice(2,2)
end

x = Array.new(6){ |i| i*i }
y = some_method(x)

这样,您的代码就变得更加可预测,因为您没有改变参数的值。

您能提供一个您尝试切片的arrayd3d示例吗?从这个问题来看,我并不清楚您正试图通过slice实现什么。您需要:1)显示一个数组
arrayd3d
,而不参考它是如何创建的。2) 显示一个Ruby对象,该对象标识要“切片”的元素。3) 显示所需的返回对象,它看起来也是一个数组。#1的一种可能性是
arrayd3d=[[1,2],[3,4],[5,6],[7,8]]
。对于#2,我猜您需要类似于
remove=[3,6]
,这将导致所需的返回值为
[[1,2],[4],[[5],[7,8]]]
。如果这就是你想要的,你需要解释一下当
array3d=[[1,6]、[3,4]、[[3,6]、[7,8]]
remove=[3,6]
属于某种我无法控制的类别时你想要什么。创建时,
array3d
会被分配一个数据结构。检查它,
arrayd3d.length#=>dim1
arrayd3d[0]。length#=>dim2
arrayd3d[0][0]。length#=>nSamples
。例如,
arrayd3d[0][0][0]#=>
arrayd3d[0][0][1]#=>5
,等等。我需要在已知位置
arrayd3d[0][0][i1..i2]
删除一块元素。为了让它更令人兴奋,我需要从所有
dim1
dim2
arrayd3d[0..dim1-1][0..dim2-1][i1…i2]
中删除相同的块。它不必使用
.slice,任何东西都可以接受@答案如何解决问题的多维度方面?看起来你只是在解释如何切!Ruby中的函数,这不是问题所在。但是我同意上面的观点,我需要删除被认为不相关的数据块(根据特定的标准)。它必须位于原始数组(某个类的对象)中并返回。另一种方法是将完整的1D子阵列分配给另一个1D阵列,从后者中删除数据块,然后用修改后的子阵列替换原始子阵列。但我不知道如何在Ruby中实现这一点@斯沃夫兰