ruby 将多维数组转换为一维数组
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
时,数组之间没有分隔。
你可以这样做:
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 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]]
简单易行地对每个子数组进行展平。
output_array=[[["/path/element1", false], 7], [[4, true], 5], [["/path/element6", false], 1]].map{|x| x.flatten}
我合并了 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
时,数组之间没有分隔。
你可以这样做:
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 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]]
简单易行地对每个子数组进行展平。
output_array=[[["/path/element1", false], 7], [[4, true], 5], [["/path/element6", false], 1]].map{|x| x.flatten}