根据某些条件在ruby中拆分数组

时间:2012-10-25 19:28:59

标签: ruby arrays multidimensional-array

我有一个名为@level1的数组,其值如下:

[
  [3.1, 4],
  [3.0, 7],
  [2.1, 5],
  [2.0, 6],
  [1.9, 3]
]

我想将其拆分为两个数组,以便第一个数组(@arr1)包含值2.1,第二个数组(@arr2)包含其后的值。

执行此操作后,我会通过执行以下操作对第二个数组进行反向排序:

@arr2 = @arr2.sort_by { |x, _| x }.reverse

然后我想将此数组合并到@arr1。有人可以帮我分解数组,然后将它们合并在一起吗?

2 个答案:

答案 0 :(得分:64)

尝试使用partition方法

@arr1, @arr2 = @level1.partition { |x| x[0] > 2.1 }

可能需要调整条件,因为在问题中没有明确规定,但这应该是一个很好的起点。

答案 1 :(得分:1)

这样的事情?

arr = [
  ["3.1", 4],
  ["3.0", 7],
  ["2.1", 5],
  ["2.0", 6],
  ["1.9", 3]
]

arr1, arr2 = arr.inject([[], []]) do |f,a|
  a.first.to_f <= 2.1 ? f.last << a : f.first << a; f
end

arr = arr1 + arr2.reverse
=> [["3.1", 4], ["3.0", 7], ["1.9", 3], ["2.0", 6], ["2.1", 5]]

看到它正在运行here