我有一个Web服务,它应该按字母顺序返回翻译键列表。但是当涉及到下划线时,它实际上并没有这样做。它按以下顺序发送密钥:
en.orders
en.order_mail
而我希望订单是这样的:
en.order_mail
en.orders
这是排序字符串给出的顺序:
["en.orders", "en.order_mail"].sort
# => ["en.order_mail", "en.orders"]
我不确定如何处理这件事。我试过删除下划线,用其他角色等替换它们但是它总是有一些不必要的副作用。
在排序数组时,有没有办法对下划线进行不同的处理?
答案 0 :(得分:2)
他们声称“en.orders”来自“en.order_mail”“
他们如何支持这一说法? “_”是ASCII 95,“s”是ASCII 115.相同的是UTF-8。所以下划线在“s”之前正确排序。我不明白它是怎么回事。
然而,这是大写字母的另一种方式。
puts ["en.orders", "en.order_mail"].map(&:upcase).sort
# >> EN.ORDERS
# >> EN.ORDER_MAIL
有了这些知识,您可以通过上传,排序,下放来匹配他们的排序顺序(如果这是您想要做的)。
或者只是使用sort_by
,它可以不是通过元素对数组进行排序,而是通过元素的函数对其进行排序(感谢提醒@steenslag)
puts ["en.orders", "en.order_mail"].sort_by(&:upcase)
# >> en.orders
# >> en.order_mail