F#使用set来过滤地图键以获得缩小的地图

时间:2017-10-24 18:16:21

标签: filter f# set maps key

我有关于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位数。

1 个答案:

答案 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