拆分地图!不起作用

时间:2017-09-22 14:36:28

标签: ruby

为什么要映射! doens使用分裂的字符串?

str = "abcd"  
str.split('').map! { |x| x + "!" }
str # => "abcd"

我预计会返回["a!","b!","c!","d!"]

3 个答案:

答案 0 :(得分:3)

str.split('')返回一个新数组。针对新字符串调用.map!不会更改原始str

str.split('')的结果分配回str

str = str.split('')
str.map! { |x| x + "!" }
str  # => ["a!", "b!", "c!", "d!"]

或者,将整个结果分配回str

str = str.split('').map! { |x| x + "!" }
str  # => ["a!", "b!", "c!", "d!"]

注意

最初使用相同的变量来保存字符串,然后保存数组可能会混淆代码的读者。你最好为数组使用不同的变量;

arr = str.split('')
arr.map! { |x| x + "!" }
arr  # => ["a!", "b!", "c!", "d!"]

答案 1 :(得分:1)

因为您正在更新就地是,但是因为您没有将其实例保存在任何地方而浪费的数组对象。

split('')

请注意,您可以从chars移至By.XPath("//a[@class='txtLnk'")

答案 2 :(得分:1)

您也可以使用#chars:

> "abcd".chars.map { |x| x + '!' }
=> ["a!", "b!", "c!", "d!"]