最近我们不得不支持我们的网页应用程序'分页'
来自我们数据库的2种不同型号(客户,查询)。
我们假设页面大小为5,
我们正在排序'名字'。
因此,我们所有的追随者'排序'操作将按first_name
排序我们的流程使用排序 3次:
我们的问题:
对于字符串,Postgres排序和Ruby排序似乎完全不同。
例如,Postgres和Ruby对这些词进行了不同的排序。
排序结果:
Postgres:w1,w2
Ruby:w2,w1(相反)。
它位于脸部Ruby比较器的数字和短跑( - )字符与Postgres相反。
我们的问题仅在于排序' Strings'
按日期/整数排序的行为相同(感谢上帝)。
有谁知道是否可以覆盖/配置Ruby的排序? 因此,我们对Array排序的预期结果将遵循Postgres排序的配置。
答案 0 :(得分:0)
您似乎需要自定义排序。这可以通过创建自定义方法来比较2个字符以重新设置<=>
方法使用的默认sort
来实现。
你可以在你想要的字符串之间实现一个比较操作(我的可能不是更好的,但至少它可以按照你的意愿反转短划线和数字之间的比较)。
以下是我自定义比较方法的示例:
def custom_compare(s1, s2)
s1_array = s1.split("")
s2_array = s2.split("")
s1_array.each_with_index do |c1, i|
c2 = s2_array[i]
if c1 != c2
if(c1 == "-" && c2 =~ /\d/ || c2 == "-" && c1 =~ /\d/)
return c1 == "-" ? 1 : -1
end
return c1 <=> c2
end
end
return 0
end
然后在红宝石中使用它:
["customer - hello", "customer 1"].sort!{|a, b| custom_compare(a, b)}
# => ["customer 1", "customer - hello"]