我在C#中创建了一个简单的排行榜应用程序。但是我注意到拉动和订购分数的问题。假设我在一个有序集合(95,12,60,50,66)上运行ZREVRANGE,然后它将以95,66,60,50,12的顺序返回。很棒,这正是我想要的。
但是,如果我向同一个订单集添加100,则ZREVRANGE返回95,66,60,50,12,100。它在集合的末尾放置100,即使它大于其他数字。总结挖掘之后,我能够发现ZREVRANGE返回一个锯齿状的字节数组。从我所知道的,它是基于数字中的第一个数字的顺序,这是锯齿状数组中的第一个数字。这是一个例子。
正如您所看到的,它看起来像是基于订购的。我应该使用不同于ZREVRANGE的东西吗?
答案 0 :(得分:2)
有序集使用分数进行排序。如果成员具有相同的分数,则按字典顺序排列。
看起来你正在使用会员来存储排行榜的分数,我打赌你将所有会员的分数设置为相同的值。除了产生意想不到但正确的词典排序外,这也意味着你将无法多次存储相同的分数。