Julia中不区分大小写的字符串比较

时间:2016-09-08 19:55:30

标签: string julia

我确定这有一个简单的答案,但如何在Julia中比较两个字符串并忽略大小写?我已经将一个相当不优雅的解决方案整合在一起了:

function case_insensitive_match{S<:AbstractString}(a::S,b::S)
    lowercase(a) == lowercase(b)
end

必须有更好的方法!

1 个答案:

答案 0 :(得分:6)

效率问题

您选择的方法在大多数设置中确实可以正常使用。如果您正在寻找更有效的东西,那么您就不会轻易找到它。原因是资本与小写字母存储有不同的位编码。因此,在比较字符串中的字符时,不会出现字符对象的某些大小写字段。幸运的是,资本与小写之间的比特差异非常小,因此转换简单而有效。有关此背景,请参阅此SO帖子:

How do uppercase and lowercase letters differ by only one bit?

准确性问题

在大多数设置中,您拥有的方法都能正常工作。但是,如果您遇到诸如资本与小写希腊字母之类的字符,它可能会失败。为此,您最好使用normalize_string()功能(有关详细信息,请参阅docscasefold选项:

normalize_string("ad", casefold=true)

在Python的上下文中查看此SO帖子,其中解决了相关问题,因此无需重复:

How do I do a case insensitive string comparison in Python?

由于它正在讨论utf编码的基本问题,因此它适用于Julia和Python。

有关lowercase()可能失败的地方的其他背景和具体示例,请参阅此Julia Github讨论:

https://github.com/JuliaLang/julia/issues/7848