拆分字符串时,Ruby中的#split和#chars有什么区别?
"Hello, World".split("")
#=> ["H", "e", "l", "l", "o", ",", " ", "W", "o", "r", "l", "d"]
"Hello, World".chars
#=> ["H", "e", "l", "l", "o", ",", " ", "W", "o", "r", "l", "d"]
Run Code Online (Sandbox Code Playgroud)
它们都返回一个数组,它们都包含空格和标点符号.
是否有一种情况更可取?
split
和chars
[...] 之间有什么区别?
string.chars
解析基础字节以返回字符串的字符,而string.split('')
使用正则表达式来实现相同的字符.
因此,chars
更快,更健壮.它甚至可以在字符串包含无效字符时起作用:
"foo\x80bar".chars
#=> ["f", "o", "o", "\x80", "b", "a", "r"]
Run Code Online (Sandbox Code Playgroud)
而split
如果字符串格式不正确(因为正则表达式引擎无法处理它)失败:
"foo\x80bar".split('')
#=> ArgumentError: invalid byte sequence in UTF-8
Run Code Online (Sandbox Code Playgroud)
如果我没有弄错,split('')
相当于split(//)
.
是否有一种情况更可取?
split('')
可以在许多教程中找到.我假设这是因为在Ruby 2.x之前,chars
返回了一个枚举器.因此,为了获得一个数组,你必须使用两个方法调用:
string.chars.to_a
Run Code Online (Sandbox Code Playgroud)
或者一次打电话:(也略短)
string.split('')
Run Code Online (Sandbox Code Playgroud)
如今,您使用chars
(或each_char
用于2.x之前的行为)
您可以使用split根据分隔符将字符串分成子字符串
例如:
"a/b-c".split('/') will return ["a", "b-c"]
Run Code Online (Sandbox Code Playgroud)
chars相反返回字符串中的字符数组
"a/b-c".chars will return ["a", "/", "b", "-", "c"]
Run Code Online (Sandbox Code Playgroud)
总之,在很多情况下,一种方案比另一种方案更适合。