F# 过滤多年

F# Filtering multiple years

我的 objective 是求出以下年份的太阳总量 - 1960、1970、1980、1990、2000、2010。数据来自txt文件,year, month, maxt, mint, afday, rain 和 sun 已经定义好,从元组中取出相关元素,然后忽略其余部分。

// Example
let sun  (_,_,_,_,_,_,t) = t

我找到了 1960 年的太阳总量。但是,我不确定如何找到剩余的年份。

let Q6 =
    ds |> List.filter (fun s-> year(s)=1960)
       |> List.sumBy sun

上述方法是一个布尔值,因此多年都行不通,最好的方法是什么? 我相信答案应该是这样的:

val Q6 : float list = [1434.4; 1441.8; 1393.0; 1653.0; 1599.5; 1510.2]

您可以在应用总和之前将它们分组:

let Q6 =
    let years = [1960;1970;1980;1990;2000;2010]
    // or let years = [1960 .. 10 .. 2010]
    ds |> Seq.filter (fun value -> List.exists ((=) (year value)) years)
       |> Seq.groupBy year
       |> Seq.map (fun (year, values) -> year, Seq.sumBy sun values)
       |> Seq.toList

在这里你会得到类似的东西:

val Q6 : (int * float) list = [(1960, 1434.4); (1980, 1441.8)]

如果您不想在结果中包含年份,您可以从 lambda 中删除 year ,