@products = [#<Product id: 15, name: "abcd", revision: 100>,
#<Product id: 19, name: "test", revision: 1080>,
#<Product id: 5, name: "abcd", revision: 109>,
#<Product id: 450, name: "test", revision: 9>,
#<Product id: 2, name: "example", revision: 150>]
问题:我想输出所有产品,但唯一的条件是,如果名称重复多次,那么我想输出具有最新版本的产品。
预期输出:
@products = [#<Product id: 19, name: "test", revision: 1080>,
#<Product id: 5, name: "abcd", revision: 109>,
#<Product id: 2, name: "example", revision: 150>]
由于有两个名为“abcd”的产品,它应该显示具有最新版本的产品,并且应用于“test”,但由于“示例”没有重复,因此它会正常呈现。
任何帮助都会非常感激,一直坚持这一点。
答案 0 :(得分:3)
这应该可以解决问题:
temp_array = @products.group_by(&:name)
@filtered_products = temp_array.map do |name, products|
products.sort{ |p1, p2| p2.revision <=> p1.revision }.first
end
如果您需要,请随时询问详细信息;)
答案 1 :(得分:0)
仅限ActiveRecord:
Product.select("name, MAX(revision) AS max_revision, COUNT(*) AS count")
.group("name")
.having("count > 1")