2014-05-14 47 views
0

我有標記編號的問題(the keys)哈希,和五個可能的答案(the values)有沒有一種用哈希映射排序的優雅方法?

questions = { 
    likert_1: %w(choice_5mMP0CMR9tC choice_6kUil9z7wi4 choice_6ZQQ7c2KR3O choice_6ilb652FCqZ choice_6Z3NYElYPPM), 
    likert_2: %w(choice_5pjBFzoqqpc choice_6AARUgqxvGL choice_5lnoEM7GUYr choice_5inpB7UT9Bs choice_6N6ETdSVpFP) 
} 

數據庫是基於用戶節省,每題一個值。所以數據庫可以有每個likert_#一個值的任意組合。 但是!數據庫不會按照它們被回答的順序保存它們。

因此,我試圖找到一種優雅的方式前likert_2

所以,如果我不得不用他們的排序方式likert_1任何給定的兩個響應排序:[choice_5pjBFzoqqpc choice_5mMP0CMR9tC]。然後他們應該被退回爲:[choice_5mMP0CMR9tC, choice_5pjBFzoqqpc],因爲choice_5mMP0CMR9tC出現在likert_1choice_5pjBFzoqqpc出現在likert_2

+1

如何存儲的響應? –

+0

作爲'Answer'對象,其中'answer'屬性包含例如'choice_5mMP0CMR9tC'。我可以通過執行'@ answers.map(&:answer)' – Trip

+0

來訪問一系列選項。是否有時間戳不正確的原因?根據您處理的數據規模,分類可能是一項非常昂貴的操作。 –

回答

1

正如我還指出,作爲一個評論,它可能是更有效和更優雅的做排序,檢索的答案,而不是事後查詢。既然你有Answer和(大概)Question表,AnswerQuestion你可以在你需要的Question在查詢屬性使用ORDER BY隨便點之間的關係。

說了這麼多;由於您詢問了如何根據提供的Hash中的問題順序訂購包含答案的Array,但沒有人回答,我會回答該問題。

這裏的一個簡單的想法是找到包含答案的問題的索引作爲其選擇之一,並將該索引用作sort_by屬性。你可以這樣做以下列方式:

answers = ["choice_5pjBFzoqqpc", "choice_5mMP0CMR9tC"] 

question_choices = questions.values 
sorted = answers.sort_by { |a| question_choices.find_index { |c| c.include? a } } 
# ["choice_5mMP0CMR9tC", "choice_5pjBFzoqqpc"] 
+0

這很好。實際上沒有問題表,我只能每頁最多排序10個答案,所以它本身並不完全「昂貴」。謝謝! – Trip

+0

夠公平的,很高興我能幫到你! –

相關問題