2016-11-29 97 views
1

我已经合并了2个列表。ruby​​将多维数组转换为一个数组

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]] 

我想将其转换成出三维散,像:

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

当我使用flatten,有之间没有分离阵列。

回答

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]] 
+0

@@ sagarpandya82打我吧。 – user3366016

+0

不,我们有不同的答案! –

+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]] 
7

简单而简单的做到平铺到每个子阵列。

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