我必须解决以下练习:
“实现第一个方法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上工作:(有人可以帮忙吗?
答案 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
,您的代码将完全一样。