1

上一个问题:F# 过滤多年

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

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

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

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

4

2 回答 2

0

使用List.sort提供函数,该函数将按降雨降序排序并获取前 2 个元素

于 2015-02-26T16:38:26.220 回答
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
于 2015-02-26T16:38:34.610 回答