2012-09-03 37 views
1

我有34個元素,但我只需要知道哪些是排名前5位。我如何排序找到34個元素中的前5個

我在所有34個元素中使用比較「A對B」型問卷調查表。

現在,它不是動態的,所以我不能根據以前的問題來改變問題。

  • 問我能問的最少問題數量是多少?
  • 你會使用什麼排序算法?

現在我正在使用manualation和使用Excel,但想知道如何最終在Ruby中爲基本的Rails應用程序執行此操作。

+0

「questionaire」是什麼意思?這是一個由用戶回答的問題,還是由計算機回答的問題(例如,通過比較兩個整數來查看哪個更大)? –

回答

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

它可能更具可讀性:'a.sort_by {| x | x [:score]}。reverse [0..4]' – pguardiario

+0

謝謝,改變了。我喜歡''超過''[0..4]' – ronalchn

+0

'反向'大型陣列可能是昂貴的。否定'sort_by'中的值或顛倒'sort'子句中比較的順序。 –

相關問題