ruby-on-rails - 我如何排序以找到 34 个元素中的前 5 个

标签 ruby-on-rails ruby sorting

我有 34 个元素,但我只需要知道排名前 5 位的元素。

我正在对所有 34 个元素使用比较“A 与 B”类型的问卷。

现在,它不是动态的,所以我无法根据之前的问题更改问题。

  • 我可以在问卷中提出的最少问题数量是多少?
  • 您会使用什么排序算法?

现在我正在使用手册和 Excel,但想知道最终如何在 Ruby 中为基本的 Rails 应用程序做这件事。

最佳答案

如果您只有简单的整数、 float 或字符串,您可以轻松地对数组进行排序:

a = [ 3,3,1,6,2,8 ]
a.sort # => [1,2,3,3,6,8]

但这是升序排序。

要降序排序,你可以这样做:

a.sort {|x,y| y <=> x } # => [8,6,3,3,2,1]

a.sort.reverse # => [8,6,3,3,2,1]

然后要获取前 5 个元素,只需使用:

a.sort.reverse.take(5) # => [8,6,3,3,2]

如果您要排序的元素实际上是结构,您可以更改 sort_by block 内的代码以轻松解决这个问题,例如:

a = [{:score => 5, :name => "Bob"}, {:score => 51, :name => "Jane"}, \
     {:score => 15, :name => "Joe"}, {:score => 23, :name => "John"}, \
     {:score => 35, :name => "Sam"}, {:score => 1, :name => "Rob"}]

a.sort_by{|x| x[:score] }.reverse.take(5)
# => [{:score => 51, :name => "Jane"},{:score => 35, :name => "Sam"},...]

关于ruby-on-rails - 我如何排序以找到 34 个元素中的前 5 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12241165/

相关文章:

ruby-on-rails - ActiveRecord/Rails 中的原子插入或增量

ruby-on-rails - Rails to_xml,使用xml属性代替子节点

ruby-on-rails - rails 是如何实现 before_filter 的?

ruby-on-rails - Rails 中的通知系统

python - 如何在Python中对相关的字符串列表和数字列表进行排序?

javascript - 将文本解析为音素 - Javascript

ruby-on-rails - 如何在 Rails 3.1.0 View 中设置只读字段?

ruby-on-rails - 在 capybara 测试中, Controller 改变了一个对象,期望不会拾取它

ruby-on-rails - 使用 Twitter Bootstrap Carousel 激活第一个项目的类

javascript - 如何返回数组中最长的字符串 - 即使数组包含不是字符串的项目?