我的教授给了我们类解决问题的提示,并建议我们首先使用以下方法为类(class)建模:
let students = Map.add 1 Map.empty Map.empty
世界从一个学生开始(由他们的 ID 表示,例如 1),每个学生都有许多类(class) ID,每个类(class) ID 都有与其关联的等级(A+、F 等)。
我无法理解这段代码的实际含义,我只理解一张 map 。例如
let student = Map.add 43 "A+"
如何向提议的版本实际添加一个新的“学生”或“classID/等级”并返回一个新的 map ?
作为后续行动,我将如何访问/迭代这样的 map 上的元素? 谢谢,这里的函数式编程初学者真的很挣扎。
最佳答案
let grades = Map.empty<string,string>
let students = Map.empty<int,Map<string,string>>
let students = students.Add(1,grades.Add("class1","A").Add("class2","B"))
let students = students.Add(2,grades.Add("class3","A").Add("class4","C"))
您可以通过在 map 中建立索引来访问该值:
students.[1]
将返回 val it : Map<string,string> = map [("class1", "A"); ("class2", "B")]
其他两条评论:1) 通常您会首先构建某种数据结构,例如元组列表,然后从那里构建 map 。
let classes = [("class1","A");("class2","B")]
classes |> Map.ofList
2) 您可以通过 Map.iter 或 Map.map 遍历 map :
let classes' = classes |> Map.ofList
并防止成绩膨胀:-)
classes' |> Map.map (fun key value -> (key,value+"-"))
请看:https://en.wikibooks.org/wiki/F_Sharp_Programming/Sets_and_Maps和 https://msdn.microsoft.com/en-us/library/ee353880.aspx
关于dictionary - F# 基础 : Map of Maps?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36562519/