ruby - 如何按数组可以创建的唯一组的数量对数组进行排序

标签 ruby

我不知道如何正确地表述问题,但我想要的是以下内容:

假设有一个像这样的数组

[1,1,1,1,2,2,2,3,3,3,4,4,5]

我如何排序它,直到它成为输出:

[1,2,3,4,5,1,2,3,4,1,2,3,1]

为了使输出更具可读性:

[[1,2,3,4,5],[1,2,3,4],[1,2,3],[1]]

到目前为止我想出的是:

array = [1,1,1,1,2,2,2,3,3,3,4,4,5]
array.group_by{|n| n }.values.transpose.flatten

但是由于没有相同数量的数字,这会引发错误。

有人可以帮忙吗?

最佳答案

这需要一段时间,但这是您想要的:

array = [1,1,1,1,2,2,2,3,3,3,4,4,5]

a = array.group_by{|n| n }.values.sort_by(&:length).reverse

a.each{|q| (a[0].size-q.size).times{q<<nil}}

a.sort.transpose.flatten.compact

它产生:

  => [1, 2, 3, 4, 5, 1, 2, 3, 4, 1, 2, 3, 1]

*你有3个2

关于ruby - 如何按数组可以创建的唯一组的数量对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29966975/

相关文章:

ruby-on-rails - 从 before(:each) block) 中获取完整的 RSpec 测试名称

ruby-on-rails - 无法分配内存

ruby-on-rails - 这行代码似乎适用于 Rails 2.x.x 但不适用于 3.x.x?有人可以帮忙解决 "translate"吗?

ruby-on-rails - Ruby on Rails ActiveRecord 约定

ruby - 在 Ruby 中执行多个要求的最佳方法是什么?

ruby - 用于在 ruby​​ 中的行之间匹配内容的正则表达式

ruby - 使用 gsub 去除多个字符

ruby - Ubuntu 上的 Passenger/Ruby 内存使用失控

java - 为什么 App Engine 上的 JRuby 应用程序需要很长时间才能启动(与 Python 应用程序相比)?

ruby-on-rails - 测试 Controller 方法。规范