ruby-on-rails - 算法 ruby​​ (rails) 最佳分数数组

标签 ruby-on-rails ruby algorithm

我正在尝试将一些(十)项与另一项链接起来。 要选择项目,我有一些标准是我的项目的属性(比如“类别”、“尺寸”和“重量”)。 这些标准中的每一个都有一个分数(假设类别为 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/

相关文章:

ruby - rbenv 无法更改全局 ruby​​ 版本

ruby 元编程父类(super class)不继承

performance - 调度最优记录列表的算法

string - 从字符串中删除重复的字符串

ruby-on-rails - Rails 部分和 HAML

ruby-on-rails - 为什么 `rake assets:precompile` 抛出 "getaddrinfo: Name or service not known"? (重新 : asset_sync)

ruby-on-rails - 使用带有光学字符识别的 Ruby 和 Ubuntu

ruby-on-rails - 未初始化的常量 Item::Types

ruby - 使用 aws-sdk gem 列出 s3 中的所有文件

javascript - 从多个对象中找到最接近的 x 属性值之和