Метод работает только с .select или .reject, но не работает с решением .map - PullRequest
0 голосов
/ 29 декабря 2018

Мне нужно решить следующее упражнение:

"Реализовать первый метод size_splitter, который принимает два параметра: массив и целое число (размер). Предположим, что массив содержит только слова, напримерСтроки, и что произвольное правило состоит в том, чтобы сформировать две группы: первую со словами заданного размера (второй параметр метода), а другую группу со всеми другими словами.

Метод size_splitter долженвернуть массив из двух массивов - двух групп, определенных выше, - с содержимым, отсортированным в алфавитном порядке. "

Мое решение было таким:

def size_splitter(array, size)

  words1 = []
  words2 = []
  filtered_array = [words1, words2]

  array.map { |word| words1 << word if word.length == size }
  array.map { |word| words2 << word if word.length != size }

  return filtered_array.sort
end

Решение упражнения:

def size_splitter(array, size)
  first_subarray = array.select { |word| word.length == size }.sort
  second_subarray = array.reject { |word| word.length == size }.sort
  return [first_subarray, second_subarray]

  # OR

  # array.sort.partition { |word| word.length == size }
end

Но я не понимаю, почему мое решение не работает, так как оно работает на pry / irb :( Кто-нибудь может помочь?

1 Ответ

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

Основное различие между вашим решением и их решением состоит в том, что вы сортируете filtered_arrays (который является массивом массивов), но вам необходимо отсортировать каждый из массивов внутри filtered_arrays.Вы можете просто изменить return filtered_array.sort на return filtered_array.map { |array| array.sort } или return filtered_array.map(&:sort).

Кстати, не рекомендуется использовать map, если вы не используете возвращаемое значение.Вы можете заменить map на each, и ваш код будет работать точно так же.

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