使用 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
。)
最佳答案
取决于您要寻找的内容。 graphemes()
将返回用户认为是单个字符的内容,即使它们可能包含多个代码点;例如,字母与重音符号组合是一个单独的字素。 split()
的情况并非如此。
考虑 + ◌́ 。在此示例中,split()
将返回两个代码点作为单独的字符,而 graphemes()
将返回单个字符。
关于arrays - 使用字素与分割的 UTF-8 字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33003177/