上一个问题:F# 过滤多年
我需要返回两年的 int 列表,其中给定年份是数据集中任何 2 月的最大降雨量。
到目前为止,我已经找到了使用 List.maxBy 的第一年,但我相信这只会返回第一个最大值。
let rainfall
ds |> List.filter (fun s-> month(s)=2)
|> List.maxBy rain
|> year
那么如何同时显示第一个和第二个?
使用List.sort
提供函数,该函数将按降雨降序排序并获取前 2 个元素
您可能应该对它们进行降序排序:
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