我有34個元素,但我只需要知道哪些是排名前5位。我如何排序找到34個元素中的前5個
我在所有34個元素中使用比較「A對B」型問卷調查表。
現在,它不是動態的,所以我不能根據以前的問題來改變問題。
- 問我能問的最少問題數量是多少?
- 你會使用什麼排序算法?
現在我正在使用manualation和使用Excel,但想知道如何最終在Ruby中爲基本的Rails應用程序執行此操作。
我有34個元素,但我只需要知道哪些是排名前5位。我如何排序找到34個元素中的前5個
我在所有34個元素中使用比較「A對B」型問卷調查表。
現在,它不是動態的,所以我不能根據以前的問題來改變問題。
現在我正在使用manualation和使用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"},...]
它可能更具可讀性:'a.sort_by {| x | x [:score]}。reverse [0..4]' – pguardiario
謝謝,改變了。我喜歡''超過''[0..4]' – ronalchn
'反向'大型陣列可能是昂貴的。否定'sort_by'中的值或顛倒'sort'子句中比較的順序。 –
「questionaire」是什麼意思?這是一個由用戶回答的問題,還是由計算機回答的問題(例如,通過比較兩個整數來查看哪個更大)? –