我有一组存储在数组中的未绑定值(如果有帮助的话,它是NSArray
)。值的范围可以从0到无穷大(实际上最大值约为100,000,000)。
我需要将数组中的值排序为 0到20 的比例。
例如,如果我有一组1000, 3123, 31
, 31 将 0 , 1000 将 10 和 3123 20 。数组的成员数量和最大值都有所不同,所以我知道有很多不同范围的值,很多这些值会占据规模上相同的位置。 大部分时间,商品数量将超过20件(平均商品数量约为100件)。
当商品数量超过20时,部分商品应具有相同的评级。
我需要这个用于每个搜索查询的歌曲人口的视觉表示,其中这些值是歌曲在全球图表上的位置的全局表示。
是否可以创建这样的算法?
答案 0 :(得分:2)
如果我理解你,你只想对你的值进行排序并将它们映射到0到20的范围?因此,您可以计算您拥有的值(例如11),将您的范围除以此数字 - 1(例如20 /(11 - 1)= 2)并为每个值分配适当的数字(例如0,2,4, 6,8 ...)
答案 1 :(得分:0)
对数组进行排序。现在将每个项目的索引乘以(20 /([myArray count] - 1));注意,计数必须> 1.我猜你不会超过20件?
答案 2 :(得分:0)
像计算一样的百分比对你有帮助吗? 即使用最大值作为100%(即20),其余的映射为最大值的百分比。 对于你的前任:
[ 1000 3123 31 ]
(31/3123)*20 = 2
(1000/3123)*20 = 6 (or 7)
(3123/3123)*20 = 20
这样,最终值(0-20比例)仍将具有初始集中数字的分布。