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

Posted

技术标签:

【中文标题】ruby 将多维数组转换为一个数组【英文标题】:ruby convert multidimensional array into one array 【发布时间】:2017-04-13 23:14:05 【问题描述】:

我已经合并了 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 时,数组之间没有分隔。

【问题讨论】:

【参考方案1】:

轻松简单地对每个子数组进行展平。

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

【讨论】:

【参考方案2】:

你可以这样做:

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

【讨论】:

@@sagarpandya82 打败了我。 不,我们有不同的答案! 这是我的问题的完美答案。谢谢 @RickySpanish 更新了一个可能更好的方法,看看。 @RickySpanish 删除了替代方案,正如 Anuj 已经发布的那样,它实际上是更好的解决方案,所以我会接受这个答案。【参考方案3】:

您可以使用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]]

【讨论】:

以上是关于ruby 将多维数组转换为一个数组的主要内容,如果未能解决你的问题,请参考以下文章

将多维数组转换为单个数组

将c多维数组转换为多维c++向量

PHP:将多维数组转换为简单数组

如何将数组列表转换为多维数组

将多维数组转换为一维数组的算法

如何将多维数组转换为json对象[关闭]