所以我想根据倍数因素对项目进行排名,但有些因素比其他因素更重要。
具体而言,我列出了所有具有以下属性的产品:
每个属性都有不同的比例,我知道min&最大范围。
例如价格介于10到200之间,而重量介于1.2和3.4等之间
我想优先考虑尺寸,然后是建造时间,重量,最后是价格。
但是,我想确保无论是建造时间,重量还是价格值,大小应该是首要的事情。
例如:
[{
price: 320,
size: 10,
weight: 0.4
time: 4
},
{
price: 230,
size: 5,
weight: 1.2
time: 23
},
{
price: 230,
size: 10,
weight: 1.2
time: 23
}]
应该导致:
[{
price: 230,
size: 5, // the lowest the better
weight: 1.2
time: 23
},
{
price: 320, // the higher the better
size: 10,
weight: 0.4
time: 4
},
{
price: 230,
size: 10,
weight: 1.2
time: 23
}]
我不擅长数学,但我真的不知道从哪里开始。
我正在考虑将相同范围内的每个值进行缩放(例如从0到100),然后将结果范围值应用于一个因子,然后将它们全部添加到排序之类或之类的内容。
任何想法。
答案 0 :(得分:2)
看起来您希望按递增顺序按大小排序,然后如果两个对象具有相同的大小,则按时间递增顺序,然后按重量递增顺序,然后按降低中的价格订单(根据您的示例中的评论)。
如果您使用的是Python之类的语言,只需将四个值放入元组中,其中的项目将按降序排列,其值将替换为负数。对于每个项目,您的密钥是
(size, time, weight, -price)
然后Python本身会对这些元组进行适当的排序 - 它内置于语言中。这是最简单的事情。
如果您使用的是没有排序元组的语言,或者由于某种原因您确实希望该键是浮点值,则可以执行此操作。对于每个因素,请查看已知的最小值和最大值。使用它们将该因子缩放到1到10之间的数字,可能包括1但不包括10.确保1与要排序的值一起使用。这可以通过
完成scale1to10 = (value - min) / (max + 1 - min) * 9 + 1
增加因子,
scale1to10 = (max - value) / (max + 1 - min) * 9 + 1
减少因素。然后将所有因素合并为一个" 4位"数字,如
scale = scalesize * 1000 + scaletime * 100 + scaleweight * 10 + scaleprice
请注意,最重要的因素是乘以10的最高功率,而最低的则没有乘数。
答案 1 :(得分:0)
您的排序功能应该能够传递比较功能。传递一个比较函数,按顺序测试每个字段,如果到目前为止所有内容相等,则仅移动到下一个字段。在大多数语言中,这并不难。我的猜测(基于您的发布历史记录)是您正在使用PHP,因此http://www.the-art-of-web.com/php/sortarray/可能是如何做到这一点的最佳指南。