如果我有字符串,"UGGUGUUAUUAAUGGUUU"
该如何将其变成一个列表,该列表每3个字符分成一个["UGG", "UGU", "UAU", "UAA", "UGG", "UUU"]
?
如果您的字符串仅包含ASCII字符,并且字符串byte_size
是3的倍数,那么使用鲜为人知的Elixir功能有一个非常优雅的解决方案:二进制理解:
iex(1)> string = "UGGUGUUAUUAAUGGUUU"
"UGGUGUUAUUAAUGGUUU"
iex(2)> for <<x::binary-3 <- string>>, do: x
["UGG", "UGU", "UAU", "UAA", "UGG", "UUU"]
这会将字符串分成3个字节的块。这将比在代码点或字素上分割要快得多,但是如果您的字符串包含非ASCII字符,则将无法正常工作。(在那种情况下,我会接受@michalmuskala的回答。)
编辑:Patrick Oscity的答案提醒我这也可以用于代码点:
iex(1)> string = "αβγδεζηθικλμνξοπρςστυφχψ"
"αβγδεζηθικλμνξοπρςστυφχψ"
iex(2)> for <<a::utf8, b::utf8, c::utf8 <- string>>, do: <<a::utf8, b::utf8, c::utf8>>
["αβγ", "δεζ", "ηθι", "κλμ", "νξο", "πρς", "στυ", "φχψ"]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句