方法仅适用于.select或.reject,不适用于.map解决方案

时间:2018-12-29 20:55:12

标签: ruby

我必须解决以下练习:

“实现第一个方法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 :(得分:1)

解决方案与解决方案之间的主要区别在于,您正在对filtered_arrays(这是一个数组数组)进行排序,但是需要对filtered_arrays中的每个数组进行排序。您可以将return filtered_array.sort更改为return filtered_array.map { |array| array.sort }return filtered_array.map(&:sort)

顺便说一句,当您不使用返回值时,最好不要使用map。您可以将map替换为each,您的代码将完全一样。