使用graphemes
优于split
从UTF-8字符串创建数组是否有优势?
例如,请考虑以下事项:
# Define a UTF-8 string with a bunch of multibyte characters
s = "{(-n↑⍵÷⊃⊖⍵),⍨⍉1↓⍉∘.=⍨⍳n←1-⍨≢⍵}"
# Create an array using split
split(s, "")
# Create an array using graphemes (v0.4+)
collect(graphemes(s))
两种方法都产生预期的输出。事实上,
split(s, "") == collect(graphemes(s))
返回true
。
这两种方法似乎始终如一地产生相同的结果。一种方法通常优于另一种方法,无论是性能,风格还是其他方式?
(注意graphemes
返回迭代器而不是数组,因此返回collect
。)
答案 0 :(得分:7)
取决于您的需求。 graphemes()
将返回用户认为是单个字符的内容,即使它们可能包含多个代码点;例如,与重音符号组合的字母是单个字素。 split()
不是这种情况。
考虑一个+◌。在此示例中,split()
将两个代码点作为单独的字符返回,而graphemes()
将返回单个字符。