如何从列表中生成字典?
采用以下列表:
let numbers = [1;2;2;3;3;3;4;5;5;]如何生成一个字典,其中键是元素,值是元素在列表中发生的次数?
我悲伤的尝试:
let numbers = [1;2;2;3;3;3;4;5;5;]
numbers |> Seq.fold (fun accumulator element -> Map.add (element, element list???) 0)发布于 2016-02-16 13:52:59
let numbers = [1;2;2;3;3;3;4;5;5]
let map = numbers |> Seq.groupBy id |> Map.ofSeq
map |> Map.iter (printfn "%A - %A")打印:
1 - seq [1]
2 - seq [2; 2]
3 - seq [3; 3; 3]
4 - seq [4]
5 - seq [5; 5]链接:
https://dotnetfiddle.net/xyNyzn
编辑:
如果你想得到:号码-频率(现在使用Seq.fold:)
let addElement (acc:Map<int,int>) element =
if acc.ContainsKey element then acc.Add(element, acc.[element] + 1)
else acc.Add(element, 1)
(Map.empty, numbers)
||> Seq.fold (addElement)
|> Map.iter (printfn "%A - %A")打印:
1 - 1
2 - 2
3 - 3
4 - 1
5 - 2链接:
发布于 2016-02-16 17:46:13
示例代码使用Map,但是,假设如您所说的Dictionary,可以编写这样的函数:
Seq.countBy id >> dicthttps://stackoverflow.com/questions/35434285
复制相似问题