2016-05-07 3 views
1

Так что у меня тип записи:добавляющие элементы типа записи

data Box = Box { edge :: Char 
        , time1 :: [Int] 
        , time2 :: Int 
        } 
      deriving Eq 

и этот список по ссылке:

list_of_boxes :: [Box] 

Как я могу суммировать значения для time1 в каждом окне списка , затем найдите, какое поле дает наибольшее значение для time1?

ответ

6

Это будет работать

maximumBy (compare `on` sum . time1) list_of_boxes 

Вам нужно будет импортировать Data.List и Data.Function.

+0

благодарит миллион, который работал – mikejay

1

Это подведет каждый список только один раз:

import Data.List 
import Data.Ord 
snd . maximumBy (comparing fst) . map (\x -> (sum . time1 $ x , x)) $ list_of_boxes 

выше может быть укорочен НЕМНОГО с помощью стрелок:

import Control.Arrow 
snd . maximumBy (comparing fst) . map (sum . time1 &&& id) $ list_of_boxes 
Смежные вопросы