是否有一个衬里破坏性地使用`.split(//)`(例如将字符串转换为数组)?

时间:2013-04-09 18:24:54

标签: ruby

到目前为止,我有:

my_array = "Foo bar na nas"
my_array.delete!(" ").downcase!
my_array = my_array.split(//).uniq

获得:

==> ["f", "o", "b", "a", "r", "n", "s"]

我似乎无法使用像.split!(//).delete!这样的.downcase!,但我希望一步完成所有这些操作。有可能吗?

使用my_array.delete!(" ").downcase!.split!(//)产生“':未定义的方法'拆分!'对于nil:NilClass“所以我认为.split!不存在。

4 个答案:

答案 0 :(得分:3)

没有。如果您将阅读documentation,那么当没有任何变化时,您将获得破坏性方法返回nil,因此您无法链接它们。如果你想将字符串更改为不包括whitespces的字母数组,那么你应该运行:

my_array = "Foo bar na nas".downcase.gsub(/\W/, '').split(//).uniq

也没有破坏性方法split!。它是如何存在的? Ruby是强类型语言,因此您可以将String更改为Array,因为它们不相关。

答案 1 :(得分:2)

my_array.downcase.gsub(' ','').chars.uniq

答案 2 :(得分:1)

"Foo bar na nas".downcase.split(//).uniq.keep_if { |item| item != " " }
#=> ["f", "o", "b", "a", "r", "n", "s"]

"Foo bar na nas  t  p".downcase.split(//).uniq.keep_if { |item| item != " " }
#=> ["f", "o", "b", "a", "r", "n", "s", "t", "p"]

答案 3 :(得分:1)

为什么不使用带有匹配空格的正则表达式的split或什么都不用?

"Foo bar na nas".downcase.split(/\s*/).uniq

返回

["f", "o", "b", "a", "r", "n", "s"] 

split!不存在,因为使用!的约定方法会在ruby中更改对象本身,并且您无法将字符串强制转换为数组,因为ruby是强类型的。