首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby中的Uniq by object属性

Ruby中的Uniq by object属性
EN

Stack Overflow用户
提问于 2008-09-20 23:39:18
回答 15查看 61.6K关注 0票数 137

在数组中选择与一个或多个属性相关的唯一对象的最优雅的方法是什么?

这些对象存储在ActiveRecord中,所以使用AR的方法也很好。

EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2012-04-10 13:57:31

对块使用Array#uniq

@photos = @photos.uniq { |p| p.album_id }
票数 216
EN

Stack Overflow用户

发布于 2008-09-22 08:18:32

uniq_by方法添加到项目中的数组中。它的工作原理类似于sort_by。所以uniq_by之于uniq就像sort_by之于sort。用法:

uniq_array = my_array.uniq_by {|obj| obj.id}

实现:

class Array
  def uniq_by(&blk)
    transforms = []
    self.select do |el|
      should_keep = !transforms.include?(t=blk[el])
      transforms << t
      should_keep
    end
  end
end

请注意,它返回一个新的数组,而不是修改当前的数组。我们还没有编写uniq_by!方法,但是如果您愿意的话,它应该很简单。

编辑: Tribalvibes指出该实现是O(n^2)。更好的方法是这样(未测试)...

class Array
  def uniq_by(&blk)
    transforms = {}
    select do |el|
      t = blk[el]
      should_keep = !transforms[t]
      transforms[t] = true
      should_keep
    end
  end
end
票数 22
EN

Stack Overflow用户

发布于 2008-09-21 01:42:07

在数据库级别执行此操作:

YourModel.find(:all, :group => "status")
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/109781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档