我正在尝试将一些(十)项与另一项链接起来。 要选择项目,我有一些标准是我的项目的属性(比如“类别”、“尺寸”和“重量”)。 这些标准中的每一个都有一个分数(假设类别为 15,大小为 8,重量为 3)。
我的想法是找到 10 个与当前相关联的最佳项目是这样的:
获取一个数组,其中包含按分数排序的所有可能条件组合。在这种情况下,我应该: [['类别', '尺寸', '重量'], ['类别', '尺寸'], ['类别', '重量'], ['类别'], ['尺寸', '重量'] , ['size'], ['weight] ](对应的分数分别是:26, 23, 18, 15, 11, 8, 3)
然后按顺序对所有组合提出唯一请求,每个组合之间有一个 UNION,最后限制为 10。 sql 请求将类似于:
(Select *
From items
Where category = "food"
and size = "3"
and weight = "7")<br/>
UNION <br/>
(Select *
From items
where category = "food"
and size = "3")<br/>
UNION<br/>
(.....)<br/>
limit 10;
我已经测试了这个请求,它似乎运行良好。这个想法是重要的请求是第一个,所以第一个请求的结果在顶部,限制 10 将只保留最相关的结果。但是我有点怀疑它是否可以在其他数据库上工作(它可以在 mysql 上工作,但我不确定它是否可以与 PostGreSQL 一起工作)。你怎么看?
- 就是这样,我可以将结果与我当前的项目相关联。
我的问题是第一点,我不知道如何让这个有序数组包含所有条件组合。
如果你有想法,我会采纳它^^
提前谢谢你。
最佳答案
根据@tokland 的评论更新。
以下是创建组合数组的方法:
>> a = [*1..3]
#=> [1, 2, 3]
>> b = (1..a.size).map { |n| a.combination(n).to_a }.flatten(1)
#=> [[1], [2], [3], [1, 2], [1, 3], [2, 3], [1, 2, 3]]
在另一个步骤中,您可以映射、合并和排序。
关于ruby-on-rails - 算法 ruby (rails) 最佳分数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5991936/