ruby将多维数组转换为一个数组

时间:2016-11-29 19:55:59

标签: ruby-on-rails ruby multidimensional-array flatten

我合并了两个名单。

list1 = customer.links.where(ext: true).group(:link_id, :external).limit(100).order('count_id desc').count('id') 
list2 = customer.links.where(ext: false).where.not(url: '/specific_link').group(:url, :ext).limit(100).order('count_id desc').count('id')

list = list1.merge(list2).sort_by{|k, v| -v}

结果是:

[[["/path/element1", false], 7], [[4, true], 5], [["/path/element6", false], 1]]

我想将它转换为on维哈希,就像那样:

[["/path/element1", false, 7], [4, true, 5], ["/path/element6", false, 1]]

当我使用flatten时,数组之间没有分离。

3 个答案:

答案 0 :(得分:7)

简单易行的每个子阵列都很平坦。

output_array=[[["/path/element1", false], 7], [[4, true], 5], [["/path/element6", false], 1]].map{|x| x.flatten}

答案 1 :(得分:3)

你可以这样做:

arr = [[["/path/element1", false], 7], [[4, true], 5], [["/path/element6", false], 1]]
arr.map { |k,v| [*k,v] }
#=> [["/path/element1", false, 7], [4, true, 5], ["/path/element6", false, 1]]

答案 2 :(得分:2)

您可以使用Ruby flatten method

[[["/path/element1", false], 7], [[4, true], 5], [["/path/element6", false], 1]].flatten(1)

result => [["/path/element1", false], 7, [4, true], 5, ["/path/element6", false], 1]

此处也发布在此question/answer

以下更新至少使其正确(与其他答案一样)。 要更深一些地平坦,可以使用.map来展平较低的数组。

[[["/path/element1", false], 7], [[4, true], 5], [["/path/element6", false], 1]].map {|x| x.flatten }

result => [["/path/element1", false, 7], [4, true, 5], ["/path/element6", false, 1]]