我的目标是找到接下来几年的太阳总量 - 1960,1970,1980,1990,2000,2010。数据来自一个txt文件,已经定义了年,月,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]
答案 0 :(得分:4)
您可以在应用总和之前对它们进行分组:
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 ,
。