2013-11-08 3 views
-3

У меня есть этот массив:Разделить массив на два на основе сложных критериев.

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 и отдых).

Верхний 3 должен содержать первые 3 записи для каждого индекса 0. Ранжирование должно основываться на индексе 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]] 
+3

Круто. Сообщите нам, когда закончите. –

+0

Ха-ха, Серджио несколько прав, просьба предоставить более точные данные о том, чего вы пытаетесь достичь :) –

+0

Вы должны создать uobject, чтобы было легче узнать, какие данные вы храните. Посмотрите на Struct, например. – hirolau

ответ

1

Ваш вопрос очень трудно следовать, но я хотел бы попробовать что-то вроде:

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

lower = a - top3 
+0

Большое спасибо, привет! – x13

Смежные вопросы