我有关于F#的问题,并使用地图和集合来过滤带有键的地图。 我尝试了几种方法,但我无法解决它在F#中的工作原理,需要一些关于如何在F#中编写我想要的代码的建议。
这是我到目前为止尝试的代码,只返回set head = key:
的第一个实例let rec sumECTS cs cb =
Map.filter(fun key desc -> key = (cs |> Seq.head)) cb
;;
其中cs = courseset:
let courseSet = set [ cn1 ; cn3 ; cn6 ];;
和cn#是一个5位数的课程。
Cb = courseBase:
let Coursebase1 =
Map.empty.
Add(cn1,cd1).
Add(cn2,cd2).
Add(cn3,cd3).
Add(cn4,cd4).
Add(cn5,cd5).
Add(cn6,cd6);;
其中cd#是ECTS点2位数。
答案 0 :(得分:0)
沿着这些方面可能有些东西(例如结果为66)? https://dotnetfiddle.net/n2gdar
open System
let sumEcts courseSet courseBase =
let isPartOfCourseSet cn _ =
courseSet |> Set.contains cn
courseBase
|> Map.filter isPartOfCourseSet
|> Map.toSeq
|> Seq.map (fun(cn, cd)->cd)
|> Seq.sum
let courseBase =
[
(11111, 11)
(22222, 22)
(33333, 33)
(44444, 44)
(55555, 55)
]
|> Map.ofList
let courseSet =
[11111; 22222; 33333 ]
|> Set.ofList
courseBase
|> sumEcts courseSet
|> Console.WriteLine