我是Ruby的新手,想知道是否有更好的方法来解决以下问题。
我有一个如下所示的数组:
[6, 1, 3, 6, 2, 4, 1, 3, 2, 3]
我想把它变成这个:
[ [1,1], [2,2], [3,3,3], [4], [], [6,6] ]
这是我目前的解决方案(同样,我是Ruby新手):
def split_array_into_arrays(array)
max_num = array.max
arrays = Array.new(max_num) { Array.new }
array.each do |num|
arrays[num-1] << num
end
arrays
end
arrays = split_array_into_arrays([6, 1, 3, 6, 2, 4, 1, 3, 2, 3])
puts arrays.inspect
产地:
[[1, 1], [2, 2], [3, 3, 3], [4], [], [6, 6]]
注意:我意识到我没有处理可能的错误。
经验丰富的Ruby开发人员如何实现这一目标?
答案 0 :(得分:2)
ar = [6, 1, 3, 6, 2, 4, 1, 3, 2, 3]
(1..ar.max).map{|n| [n]*ar.count(n)}
# => [[1, 1], [2, 2], [3, 3, 3], [4], [], [6, 6]]