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 ,
。
我的 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 ,
。