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

时间:2018-03-05 14:04:44

标签: ruby

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

en.orders
en.order_mail

而我希望订单是这样的:

en.order_mail
en.orders

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

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

我不确定如何处理这件事。我试过删除下划线,用其他角色等替换它们但是它总是有一些不必要的副作用。

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

1 个答案:

答案 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