ruby文档很好地解释了.flatten在没有争论的情况下所做的事情。但是我无法理解当一个1被传递到扁平的时候发生了什么
flatten(level) → new_ary
返回一个新数组,该数组是一个一维的自我平坦(递归).That,对于每个作为数组的元素,将其元素提取到新的array.The可选级别参数中,确定递归到平坦的级别。
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”将多维数组转换为常规奇异数组所执行的操作数?超级灌木丛能理解的条款将在这里非常感激。
谢谢。
发布于 2014-01-29 13:29:06
@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] https://stackoverflow.com/questions/21431190
复制相似问题