有没有一种方法可以将数组拆分为带有条件的多维数组?

时间:2019-04-14 08:33:43

标签: arrays ruby

我正在尝试“实现第一个方法size_splitter,该方法具有两个参数:一个数组和一个整数(大小)。我们将假定该数组仅包含单词,例如字符串,并且任意规则将形成两组:第一组包含给定大小的单词(方法的第二个参数),另一组包含所有其他单词。

size_splitter方法应返回一个由两个数组组成的数组-上面定义的两个组-内容按字母顺序排序。”

到目前为止,我可以返回数组的大小,但是任何排序都无法正常工作。

我尝试创建2个空数组,并且主数组中所有==目标大小的单词都放入array1,其他单词放入array2。然后我将数组1和2推入主数组。 之后,我想返回两个已排序的数组,但是我还不足以担心这一点。

def size_splitter(array, size)
  # TODO: Return an array of two arrays, the first containing
  #       words of length `size`, the second containing all the other words
  #       In addition to this split, each array should be *sorted*
  ary1 = []
  ary2 = []
  array.map do |word|
    word.length == size ? ary1.push(word) : ary2.push(word)
    array.push(ary1, ary2)
    return array.sort!
  end
end

我希望至少能够首先按大小对元素进行排序,但这似乎是第一个问题开始的地方。

4 个答案:

答案 0 :(得分:4)

我将使用partition拆分数组,然后对子数组进行排序:

RandomForestClassifier

答案 1 :(得分:0)

我看到您正在调用array.sort。乍一看,我会以为它会尝试对包含您实际感兴趣的数组的父数组进行排序。

也许尝试

array.push(ary1.sort, ary2.sort)
    return array

答案 2 :(得分:0)

似乎首先对数组进行排序可能是一种相对简单的方法。

我不认为有一种正确的方法来实现此目的,但是这是一种替代方法,它根据值是否符合大小条件将其添加到哈希值中,然后读取结果值。

def size_splitter(array, size)
  array.sort.each_with_object({true => [], false => []}) do |string, hash| 
    hash[string.size == size] << string
  end.values
end

这也很容易理解:

def size_splitter(array, size)
  [
    array.select{|string| string.size == size}.sort,
    array.reject{|string| string.size == size}.sort
  ]
end

答案 3 :(得分:0)

虽然我认为@spickermann回答最佳方法,但我建议您使用一种修复方法。

com.fasterxml.jackson.core:jackson-databind移动到return循环之外,但改用map,因为定义了空数组来收集元素。然后返回两个排序后的数组:

each