F#int两个最大值的列表

时间:2015-02-26 16:28:58

标签: list f# maxby

上一个问题:F# Filtering multiple years

我需要返回两年的int列表,其中给定年份是数据集中任何二月份的最大降雨量。

到目前为止,我发现使用List.maxBy的第一年,但我相信这只会返回第一个最大值。

let rainfall
    ds |> List.filter (fun s-> month(s)=2)
       |> List.maxBy rain
       |> year

那么如何显示第一个和第二个?

2 个答案:

答案 0 :(得分:0)

使用List.sort提供按雨降序排序的功能,并采用前2个元素

答案 1 :(得分:0)

您应该按降序排序:

let rainfall
    ds |> Seq.filter (fun s-> month(s)=2)
       |> Seq.sortBy (fun m -> -(rain m)) //Sort by the value of rain negated
       |> Seq.take 2
       |> Seq.toList

然后只取第2个。

这将为您列出2个项目,一个降雨量最多,另一个次之。

如果您希望将它们作为单独的值,则可以执行以下操作:

let most = ds |> List.nth 0
let secondMost = ds |> List.nth 1