ruby doc很好地解释了.flatten在没有参数的情况下做了什么。但是我不能为我的生活理解当1被传递以展平时发生的事情
flatten(level) → new_ary
返回一个新的数组,它是self的一维展平(递归)。也就是说,对于作为数组的每个元素,将其元素提取到新数组中。可选的level参数决定了flatten的递归级别
s = [ 1, 2, 3 ] #=> [1, 2, 3]
t = [ 4, 5, 6, [7, 8] ] #=> [4, 5, 6, [7, 8]]
a = [ s, t, 9, 10 ] #=> [[1, 2, 3], [4, 5, 6, [7, 8]], 9, 10]
a.flatten #=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
a = [ 1, 2, [3, [4, 5] ] ]
a.flatten(1) #=> [1, 2, 3, [4, 5]]
通过'递归'是否意味着参数直接影响'.flatten'执行的操作数量,以将多维数组转换为常规奇异数组?超级磨砂膏可以理解的术语在这里将非常受欢迎。
谢谢。
答案 0 :(得分:0)
基本上,对flatten
的论证意味着试图压扁结构应该有多深。
a = [ 1, 2, [3, [4, 5] ] ]
# where
[ 1, 2, [3, [4, 5] ] ] # level 0 (original array)
[3, [4, 5] ] # level 1
[4, 5] # level 2
所以,如果你传递1,它将只会深入一级并将level-2数组视为单个元素,并且不会递归到它中。所以,
a.flatten(1) #=> [1, 2, 3, [4, 5]]
答案 1 :(得分:0)
他的回答中提到的@Sergio Tulentsev是正确的。但是我想在这里添加一件事 -
如果您不提供任何参数,那么展平将以递归方式在所有嵌套级别中发生。那是a.flatten
将[1, 2, 3, 4, 5]
。
不要认为a.flatten
与a.flatten(0)
相同。不,他们的工作方式不同。如果您将嵌套级别号码作为0
,1
,2
传递,那么当您询问方法时,将会发生展平。但是如果你没有传递任何参数,那么该方法就可以正常工作,即它会创建一个单级数组,也可以通过打破所有更深层次的嵌套数组。
a = [ 1, 2, [3, [4, [5,[6]]] ] ]
# see no nested level is here, all are flattened.
a.flatten # => [1, 2, 3, 4, 5, 6]