2013-11-05 84 views
5

我無法用傳統的Ruby方法從數組user_list中刪除所有重複的對象,從而達不到預期的結果。有沒有一種聰明的方法來解決這個問題?Ruby從數組中刪除重複的對象

users = [] 
user_list.each do |u| 
    user = User.find_by_id(u.user_id) 
    users << user 
    #users << user unless users.include?(user)  # does not work 
end 
#users = users.uniq  # does not work 
+2

'uniq'真的應該工作。你可以展示你測試它的步驟以及你的結果是什麼?什麼是用戶數組中對象的類,以及它們的'=='運算符是如何定義的?這是Ruby on Rails嗎? –

+0

你使用的是Rails 4還是Rails 3?哦,對,你是否使用鐵軌?如果不是,什麼是User類? – nzifnab

+2

嗨,大家好,這是一場虛驚!我用錯誤格式的數據調用了該方法。 users.uniq確實在工作!謝謝你的幫助。 – user2041343

回答

9

這個怎麼樣?

users = User.find(user_list.map(&:user_id).uniq) 

這具有一個數據庫調用,而不是user_list.size數據庫調用額外的好處。

+0

這比他目前做的更有效率。還可以執行'User.where(user_id:user_list.map(&:user_id))',它將懶惰地執行數據庫查詢,並自動處理uniq。 – nzifnab

5
user_list.uniq! 

這應該刪除所有重複的值並保留user_list中的唯一值。 我希望這是你在找什麼。

0

您還可以使用緊湊零移除目標爲

MainMenu.first.second_sale_elements.each.map(&:sale_structure).compact.uniq