.select неопределенный метод для main: Object (NoMethodError) Ruby - PullRequest
0 голосов
/ 18 декабря 2018

Попытка создать метод для удаления отдельных элементов пробела из массива, если рядом с ним есть один элемент пробела (без двойных пробелов).Когда я запускаю ниже, я получаю эту ошибку:

ex5.rb: 5: в block in remove_double_spaces': undefined method массив 'для main: Object (NoMethodError) Вы имели в виду?Array

Я полагаю, это проблема переменной области?Как я могу вызвать сам массив в методе 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", " "])

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Чтобы избавиться от ошибки, просто замените array(array.index(value) + 1) на array[array.index(value) + 1].

Однако решение все равно будет неверным.Метод index массива возвращает индекс первого объекта в array, так что объект равен от == до 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", " "] 
0 голосов
/ 18 декабря 2018

Вы можете сделать это вместо этого. array.map(&:squeeze)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...