我如何排序找到34个元素中的前5个

时间:2012-09-03 01:51:50

标签: ruby-on-rails ruby sorting

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

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

目前,它不是动态的,所以我不能根据先前的问题改变问题。

  • 我可以问的问卷中最少的问题是什么?
  • 您将使用哪种排序算法?

现在我正在使用manualation并使用Excel,但想知道如何最终在Ruby中使用基本的Rails应用程序。

1 个答案:

答案 0 :(得分:4)

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

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"},...]