亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Swift中的字符串和字符比較不區分語言環境是什么意思?

Swift中的字符串和字符比較不區分語言環境是什么意思?

達令說 2019-11-19 11:02:52
我開始學習Swift語言,我很好奇,這意味著Swift中的字符串和字符比較不區分語言環境?這是否意味著所有字符都像UTF-8字符一樣存儲在Swift中?
查看完整描述

3 回答

?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

比較Swift字符串<與會根據所謂的“ Unicode規范化形式D”(可以通過計算 decomposedStringWithCanonicalMapping)進行詞典上的比較


例如,分解


"?" = U+00E4 = LATIN SMALL LETTER A WITH DIAERESIS

是兩個Unicode代碼點的序列


U+0061,U+0308 = LATIN SMALL LETTER A + COMBINING DIAERESIS

出于演示目的,我編寫了一個小的String擴展名,該擴展名將String的內容轉儲為Unicode代碼點的數組:


extension String {

    var unicodeData : String {

        return self.unicodeScalars.map {

            String(format: "%04X", $0.value)

            }.joined(separator: ",")

    }

}

現在,讓我們來一些字符串,用<:


let someStrings = ["?ψ", "?ψ", "?x", "?x"].sorted()

print(someStrings)

// ["a", "?", "?", "?", "?", "b"]

并將每個字符串(原始和分解形式)的Unicode代碼點轉儲到排序數組中:


for str in someStrings {

    print("\(str)  \(str.unicodeData)  \(str.decomposedStringWithCanonicalMapping.unicodeData)")

}

輸出


?x  00E4,0078  0061,0308,0078

?x  01DF,0078  0061,0308,0304,0078

?ψ  01DF,03C8  0061,0308,0304,03C8

?ψ  00E4,03C8  0061,0308,03C8

很好地顯示了比較是通過分解形式的Unicode代碼點的字典順序進行的。


如以下示例所示,對于多個字符的字符串也是如此。用


let someStrings = ["?ψ", "?ψ", "?x", "?x"].sorted()

以上循環的輸出是


?x  00E4,0078  0061,0308,0078

?x  01DF,0078  0061,0308,0304,0078

?ψ  01DF,03C8  0061,0308,0304,03C8

?ψ  00E4,03C8  0061,0308,03C8

意思就是


"?x" < "?x", but "?ψ" > "?ψ"

(這至少對我來說是出乎意料的)。


最后,讓我們將其與語言環境敏感的順序進行比較,例如瑞典語:


let locale = Locale(identifier: "sv") // svenska

var someStrings = ["?", "?", "?", "a", "?", "b"]

someStrings.sort {

    $0.compare($1, locale: locale) == .orderedAscending

}


print(someStrings)

// ["a", "?", "?", "b", "?", "?"]

如您所見,結果與Swift <排序不同。


查看完整回答
反對 回復 2019-11-19
?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

更改語言環境可以更改字母順序,例如,由于語言環境的原因,區分大小寫的比較可能會不區分大小寫,或更一般而言,兩個字符串的字母順序是不同的。


查看完整回答
反對 回復 2019-11-19
?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

詞典順序和區分區域的順序可以不同。您可以在以下問題中看到它的一個示例:在 不更改C#順序的情況下,對等價于C#的scala列表進行排序


在這種特定情況下,對語言環境敏感的順序位于_之前1,而在字典順序中則相反。


快速比較使用字典順序。


查看完整回答
反對 回復 2019-11-19
  • 3 回答
  • 0 關注
  • 605 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號