对下划线进行不同处理的字符串数组排序

问题描述 投票:-1回答:1

我有一个Web服务,应该按字母顺序返回翻译键列表。但是当涉及到下划线时,它实际上并没有这样做。它按以下顺序发送密钥:

en.orders
en.order_mail

而我希望订单是这样的:

en.order_mail
en.orders

这是排序字符串给出的顺序:

["en.orders", "en.order_mail"].sort
# => ["en.order_mail", "en.orders"]

我不知道如何处理这个问题。我已经尝试删除下划线,用其他字符等替换它们,但它总是有一些不必要的副作用。

在排序数组时,有没有办法对下划线进行不同的处理?

ruby
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.