5

以下の配列 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
4

4 に答える 4

11

これはどう?

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

これには、データベース呼び出しではなく 1 つのデータベース呼び出しになるという追加の利点がありuser_list.sizeます。

于 2013-11-05T04:27:16.807 に答える
7
user_list.uniq! 

これにより、重複する値がすべて削除され、一意の値が user_list に保持されます。これがあなたが探しているものであることを願っています。

于 2013-11-05T08:27:14.237 に答える
0

また、compact を使用して nil オブジェクトを次のように削除することもできます。

MainMenu.first.second_sale_elements.each.map(&:sale_structure).compact.uniq
于 2014-09-16T18:37:30.623 に答える