如何从Ruby中的数组创建多维数组?

问题描述 投票:0回答:4

我需要从一个数组创建一个多维数组。

例如,假设初始数组= [1,2,3,4,5,6]

我需要一个多维数组

[[[1],[1,2],[1,2,3],[1,2,3,4],[1,2,3,4,5],[1,2,3, 4,5,6]]

我觉得这应该很容易,但是我被困住了。

这是我到目前为止所拥有的,这是错误的

def solution(a)
  empty =[]
  a.each do |x|
    new_array = Array(x)
    empty.push(new_array)   
  end
  empty.reverse
end

并且我已经尝试过

def solution(a)
  empty =[]
  for i in 1..a.size
    new_array = Array(a.pop)
    empty.push(new_array)   
  end
  empty.reverse
end

有人有解决方案或建议吗?

arrays ruby algorithm multidimensional-array
4个回答
1
投票

使用1.upto(6)进行6次迭代,然后通过与1.upto(6)进行映射来制作单个数组。

1.upto(i)

这将使Enumerator的Enumerators。这些应该没问题,如果它们变大,您将节省内存。如果要强制它们为数组,请添加1.upto(6).map { |i| 1.upto(i) }

to_a

1
投票

您可以使用1.upto(6).map { |i| 1.upto(i).to_a }.to_a

flatten

0
投票

这个问题不太准确,所以以更一般的方式:

arr = []
arr = [1,2,3,4,5,6].map{ |elm| arr = [arr, elm].flatten }
arr # => [[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 6]]
def multidemensional(ary)
  ary.map { |x| 1.upto(x).to_a }
end

0
投票
multidemensional([1, 2, 3, 4, 5, 6])
# => [[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 6]]

multidemensional([2, 2, 3, 7])
# => [[1, 2], [1, 2], [1, 2, 3], [1, 2, 3, 4, 5, 6, 7]]
© www.soinside.com 2019 - 2024. All rights reserved.