如何在DAML中按某些自定义条件对列表进行排序?

时间:2019-01-22 16:54:23

标签: daml

说我有一个自定义类型的列表,称为抵押,定义如下:

data Mortgage = Mortgage {
  rate: Decimal; 
  issuedDate: Datetime;
  amount: Decimal
} deriving (Eq, Show)

在这种特殊的一次性情况下,我想基于IssuedDate以降序对列表进行排序。我该怎么做?

1 个答案:

答案 0 :(得分:2)

在标准库的模块DA.List中,您将找到可以sortBysortOn的功能。

具体地说,使用sortOn

sortMortgages: [Mortgage] -> [Mortgage] = reverse . sortOn (\m -> m.issuedDate)

完整示例:

daml 1.2
module Main where

import DA.Date
import DA.List

data Mortgage = Mortgage {
  rate: Decimal;
  issuedDate: Time;
  amount: Decimal
} deriving (Eq, Show)

sortMortgages: [Mortgage] -> [Mortgage] = reverse . sortOn (\m -> m.issuedDate)

testSortMortgages = scenario
  let
    mort1 = Mortgage with rate = 0.3; issuedDate = datetime 2007 Apr 5 14 30 05 ; amount = 1.0
    mort2 = Mortgage with rate = 0.2; issuedDate = datetime 2007 Apr 5 14 30 15 ; amount = 2.0
    mort3 = Mortgage with rate = 0.1; issuedDate = datetime 2007 Apr 5 14 30 10 ; amount = 3.0
    mortgages = [ mort1, mort2, mort3 ]
    expected = [ mort2, mort3, mort1 ]
  in
    assert $ sortMortgages mortgages == expected
相关问题