繁体   English   中英

红宝石将多维数组转换为一个数组

[英]ruby convert multidimensional array into one array

我已经合并了2个列表。

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 ,数组之间没有分隔。

轻松简单地将每个子数组展平。

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

您可以执行以下操作:

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

您可以使用Ruby flatten方法

[[["/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]

也张贴在此问题/答案中

请在下面进行更新,至少可以使此方法正确(与其他答案一样)。 要更深地平整级别,可以使用.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]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM