27

我有一个名为的数组@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. 有人可以帮助我如何拆分数组然后将它们合并在一起吗?

4

2 回答 2

84

试试分区

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

可能需要调整那里的条件,因为问题中没有很好地说明这一点,但这应该提供一个很好的起点。

于 2012-10-25T19:46:35.640 回答
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]]
于 2012-10-25T19:43:41.633 回答