Sac*_*red 0 f# loops for-loop add map
码:
let studentMap =
for i = 0 to count do
Map.empty.Add(students.[i].getId(), students.[i].getScores())
Run Code Online (Sandbox Code Playgroud)
我想按顺序添加到地图.我有一个数组中的学生对象,我正在尝试按顺序添加它们.我很困惑如何做到这一点.我想也许你制作一张空地图,然后按顺序通过for循环添加到它,但它总是会引起麻烦而且不起作用.有没有办法使用for循环将项添加到地图?这<key/value>对是:<string, int array>.这是我希望它格式化的方式,但它一直给我带来麻烦.我将再次重申目标以澄清:我希望能够使用for循环将项添加到地图中,我的学生对象数组用于获取我需要的相应数据.我将能够给它一个字符串并取回该学生的成绩.我知道这是一个我正在研究的奇怪问题,但我需要先尝试一些简单的事情.
您可以尝试更实用的惯用法:
假设你有一个类型数组Student(在下面的例子中是一个空数组):
let students = Array.empty<Student>
Run Code Online (Sandbox Code Playgroud)
您可以将数组转换为Map:
let mapStudents = students
|> Array.map (fun s -> (s.getId(), s.getScore()))
|> Map.ofArray
Run Code Online (Sandbox Code Playgroud)
您可以使用可变映射变量:
let studentMap =
let mutable m <- Map.empty
for i = 0 to count do
m <- m.Add(students.[i].getId(), students.[i].getScores())
m
Run Code Online (Sandbox Code Playgroud)
或可变字典:
let studentMap =
let m = new System.Collections.Generic.Dictionary<int, Scores>()
for i = 0 to count do
m.Add(students.[i].getId(), students.[i].getScores())
m
Run Code Online (Sandbox Code Playgroud)
更实用的解决方案是使用折叠:
let studentMap = seq { 0 .. count } |> Seq.fold (fun (m: Map<int, Scores>) i -> m.Add(students.[i].getId(), students.[i].getScores())) Map.empty
Run Code Online (Sandbox Code Playgroud)