根据复杂条件将数组拆分为两个。

时间:2013-11-08 12:53:22

标签: ruby arrays sorting

我有这个数组:

a =  [[4, 5, 59708], [6, 5, 93676], [8, 9, 3800], [8, 12, 3200], [8, 15, 6400], [8, 18, 400], [8, 20, 3200], [8, 21, 1838], [10, 11, 200], [10, 16, 100], [10, 17, 3200], [10, 19, 1400], [13, 14, 7344]]

现在我需要将这个数组拆分成两个数组(top_3和rest)。

前3名应包含每个索引0的前3个条目。排名应基于索引2。

top_3 =  [
  [6, 5, 93676], # (93676) Only one entry for index(0) == 6
  [4, 5, 59708],
  [8, 15, 6400], # (6400, 3800, 3200) top 3 for index(0) == 8
  [8, 9, 3800],  #
  [8, 20, 3200], # 
  [10, 11, 200],
  [10, 17, 3200],
  [10, 19, 1400], 
  [13, 14, 7344]]

不在前3位的其他值应存储在另一个数组中:

rest = [[8, 18, 400], [8, 12, 3200], [8, 21, 1838], [10, 11, 200], [10, 16, 100]]

1 个答案:

答案 0 :(得分:1)

你的问题很难遵循,但我会尝试类似的事情:

top3 = a.group_by(&:first).map{|a,b| b.sort_by(&:last).last(3)}.flatten(1)

lower = a - top3