首页 > 解决方案 > 我怎样才能更好地重构这段代码?

问题描述

我是 Ruby 的新手,我一直在寻找编写/重构代码的最佳方式。在这里,我想创建一个方法来创建一个包含两个新数组的数组。第一个,仅包含等于size参数的单词并按字母顺序排序。第二个,也与所有其他单词一起排序。我很确定我可以改进这段代码,但我不知道如何。谢谢你的帮助 !

sentence = ["dog", "data", "ask", "my", "win", "two", "beer", "as"]

def size_splitter(array, size)
  first_array = []
  second_array = []
  final_array = []

  array.sort.each do |arr|
    if arr.size == size
      first_array << arr
    else
      second_array << arr
    end
  end
  final_array.push(first_array, second_array)
end

puts size_splitter(sentence, 3)

#result : [["ask", "dog", "two", "win"], ["as", "beer", "data", "my"]]

标签: arraysrubyrefactoring

解决方案


您实际上可以使用Enumerable#partition 将其作为一个衬垫来完成

返回两个数组,第一个包含块计算为真的枚举元素,第二个包含其余元素。

当它说“返回两个数组”时,它实际上意味着“返回一个包含两个数组的数组”,这是您需要的结果(注意,Ruby 不支持函数的多个返回值,所以返回两个数组的唯一方法是将它们包装在另一个数组中)

sentence.sort.partition { |x| x.length == 3 }
# => [["ask", "dog", "two", "win"], ["as", "beer", "data", "my"]]

推荐阅读