27

@level1次のような値を持つという名前の配列があります。

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

これを2つの配列に分割して、最初の配列(@arr1)にまでの値が含まれ2.1、2番目の配列(@arr2)にその後の値が含まれるようにします。

その後、次のようにして2番目の配列を逆ソートします。

@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 に答える