尝试创建一种从数组中删除单个空格元素(如果旁边没有单个空格)的方法(不带双空格)。当我运行以下命令时,出现此错误:
ex5.rb:5:block in remove_double_spaces': undefined method
数组中的main:Object(NoMethodError)
你的意思是?数组
我猜这是一个可变范围问题?如何在select方法中调用数组本身?
我的逻辑在下面尝试(选择数组的所有元素,除非它是一个空白元素,并且下一个元素也是一个空白)。
def remove_double_spaces(array)
# p array.index('w') works fine here.
array.select { |value| value unless (value == ' ') && (array(array.index(value) + 1) != ' ') }
end
remove_double_spaces([" ", " ", " ", "w", "h", "a", "t", " ", "s", " ", "m", "y", " ", " ", " ", " ", " ", "l", "i", "n", "e", " "])
答案 0 :(得分:2)
您可以改为执行此操作。
array.map(&:squeeze)
答案 1 :(得分:1)
要消除错误,只需将array(array.index(value) + 1)
替换为array[array.index(value) + 1]
。
但是解决方案仍然不正确。数组的方法index
返回array
中 first 对象的索引,以使该对象==到value
。如果array
中的元素重复,则会出现错误。
我建议将您的方法重写为
def remove_double_spaces(array)
array.join.squeeze(' ').split('')
end
remove_double_spaces([" ", " ", " ", "w", "h", "a", "t", " ", "s", " ", "m", "y", " ", " ", " ", " ", " ", "l", "i", "n", "e", " "])
# => [" ", "w", "h", "a", "t", " ", "s", " ", "m", "y", " ", "l", "i", "n", "e", " "]