Ruby #split("")vs #chars on string

clo*_*kpc 8 ruby string split

拆分字符串时,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)

它们都返回一个数组,它们都包含空格和标点符号.

是否有一种情况更可取?

Ste*_*fan 9

splitchars[...] 之间有什么区别?

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之前的行为)


Sgt*_*per 5

您可以使用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)

总之,在很多情况下,一种方案比另一种方案更适合。

  • 给出这个例子,我假设OP只关心当参数是空字符串时的“split”。如果是这样,这并不能回答问题。时钟工作电脑,请澄清。另外,为什么急于选择答案?您不想看到其他答案吗? (3认同)