【问题标题】:Trouble sorting records on unique attributes无法对唯一属性的记录进行排序
【发布时间】:2008-12-27 02:09:10
【问题描述】:

使用以下代码,我只需要返回 `point' 属性唯一的记录。我自己似乎无法到达那里。

uniques = Item.find_all_by_item_id(item_id)
uniques.sort! {|a, b| b.point <=> a.point } # how do I reject the equal points?

换句话说.. 我想,你是如何制作 [0, 1, 1, 1, 2, 3, 3, 4, 4, 7] #=> [0, 2, 7] 的?

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    这个怎么样:

    # Get the number of items with each point value
    counts = Item.count("point", :group => "point")
    
    # Get the IDs of all entries that only show up once
    unique_ids = counts.collect { |count| count[0] if count[1] == 1 }.compact
    
    unique_items = Item.find_all_by_id(unique_ids)
    

    【讨论】:

    • 我认为 find_all_by_id 是你想要的......至少这在我自己的 Rails 应用程序中是有效的。我正在查看我的整数字段。
    • find_all_by_point 对我有用。 by_id 似乎只返回 []
    • 请随时更新我的​​答案或使用最终代码发表评论,以便我进行更新。
    【解决方案2】:

    我能想到几种方法来做到这一点:

    uniques.reject!{|u| uniques.select{|x| x == u}.size > 1}
    

    基本上遍历 uniques 数组,然后查看数组中是否存在多个这些项。显然有很多巧妙的方法可以加快速度,但对于小型数组,这应该可行。

    h = Hash.new(0)
    uniques.each{|u| h[u] += 1}
    h.reject{|k,v| v > 1}.keys
    

    基本上计算每个项目在哈希中出现的次数,如果它不止一个拒绝它,然后只看键。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-12
      • 1970-01-01
      • 2019-08-04
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多