我確定這有一個簡單的答案,但是如何比較兩個字符串並忽略Julia中的大小寫?我一起砍了一個相當不雅的解決方案:Julia不區分大小寫的字符串比較
function case_insensitive_match{S<:AbstractString}(a::S,b::S)
lowercase(a) == lowercase(b)
end
必須有更好的方法!
我確定這有一個簡單的答案,但是如何比較兩個字符串並忽略Julia中的大小寫?我一起砍了一個相當不雅的解決方案:Julia不區分大小寫的字符串比較
function case_insensitive_match{S<:AbstractString}(a::S,b::S)
lowercase(a) == lowercase(b)
end
必須有更好的方法!
效率問題
已選擇在大部分設定確實工作得很好的方法。如果你正在尋找更有效率的東西,你不容易找到它。原因是大寫字母與小寫字母以不同的位編碼存儲。因此,它並不像在字符串中比較字符時可以忽略的字符對象的大寫字段。幸運的是,大寫與小寫之間的差異非常小,因此轉換簡單高效。看到這個SO張貼背景在此:
How do uppercase and lowercase letters differ by only one bit?
精確性的問題
在大多數的設置,你必須能夠準確工作的方法。但是,如果您遇到諸如大寫或小寫希臘字母之類的字符,它可能會失敗。對於這一點,你會與normalize_string()
功能(參見docs瞭解詳細信息)與casefold
選項更好:
normalize_string("ad", casefold=true)
請參閱本SO張貼在Python中的哪個位置,從而解決了相關的問題不一定是上下文重複:
How do I do a case insensitive string comparison in Python?
,因爲它是談論與UTF編碼的根本問題,它適用於茱莉亞以及Python的。
也欲瞭解更多的背景和地方具體的例子這朱莉婭Github上的討論,其中lowercase()
可能失敗:
事實上,它看起來通用的方法,你會想到什麼? –
如果您想要一個更類似於「c」的字符串比較返回-1,0或1,則使用'cmp'而不是'=='。但是否則,是的,這似乎是進行不區分大小寫比較的最佳方式。根本不是不雅。 –
字符串是一個混亂的業務。比較字符串時,_good_解決方案不會a)分配,b)比較第一個區別。但最重要的是正確性(和靈活性,以堅持理想的職業水平)。是的,即使正確性很難定義,字符串是混亂的,但這對於程序員和Julia來說是重要的。 –