我有 34 个元素,但我只需要知道哪些是排名前 5 的元素。
我在所有 34 个元素中使用比较“A 与 B”类型的问卷。
现在,它不是动态的,因此我无法根据先前的问题更改问题。
- 我可以在问卷中提出的最少问题数是多少?
- 你会使用什么排序算法?
现在我正在使用手册并使用 Excel,但想知道如何最终在 Ruby 中为基本的 Rails 应用程序执行此操作。
我有 34 个元素,但我只需要知道哪些是排名前 5 的元素。
我在所有 34 个元素中使用比较“A 与 B”类型的问卷。
现在,它不是动态的,因此我无法根据先前的问题更改问题。
现在我正在使用手册并使用 Excel,但想知道如何最终在 Ruby 中为基本的 Rails 应用程序执行此操作。
如果您只有简单的整数、浮点数或字符串,您可以轻松地对数组进行排序:
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 块内的代码以轻松解决此问题,例如:
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"},...]