gpt4 book ai didi

ruby-on-rails - 按字段可用性对对象排序

转载 作者:太空宇宙 更新时间:2023-11-03 17:37:10 24 4
gpt4 key购买 nike

我有一个 place 对象,它具有以下参数:phonecategorystreetzip网站

我还有一组 place 对象:[place1, place2, place3, place4, place5]

根据参数可用性对 place 数组进行排序的最佳方法是什么?即,如果 place1 具有最多的可用参数,或最少数量的 nil 参数,则应将其重新排序为第一个,依此类推。

编辑:这些对象不是ActiveRecord对象

最佳答案

我会让每个 Place 对象知道它有多完整:

class Place
attr_accessor :phone, :category, :street, :website, :zip

def completeness
attributes.count{|_,value| value.present?}
end
end

然后很容易按完整性对放置的对象进行排序:

places.sort_by(&:completeness)

编辑: 非 ActiveRecord 解决方案:

由于 Ruby on Rails 标记,我曾假设这是一个 ActiveRecord 模型。由于这是一个非 ActiveRecord 模型,您可以使用 instance_variables 而不是 attributes。 (顺便说一句,恭喜你知道 Rails 中的领域模型不必继承自 ActiveRecord)

class Place
attr_accessor :phone, :category, :street, :website, :zip

def completeness
instance_variables.count{|v| instance_variable_get(v).present?}
end
end

编辑 2: 加权属性

您对计算加权分数有意见。在这种情况下,或者当您想选择特定属性时,您可以将以下内容放入您的模型中:

  ATTR_WEIGHTS = {phone:1, category:1, street:2, website:1, zip:2}

def completeness
ATTR_WEIGHTS.select{|k,v| instance_variable_get(k).present?}.sum(&:last)
end

注意 sum(&:last) 等同于 sum{|k,v| v} 反过来又是 reduce(0){|sum, (k,v)| 的 railsism sum += v}.

关于ruby-on-rails - 按字段可用性对对象排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13336292/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com