首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从列表中生成字典?

如何从列表中生成字典?
EN

Stack Overflow用户
提问于 2016-02-16 13:46:01
回答 2查看 390关注 0票数 1

如何从列表中生成字典?

采用以下列表:

代码语言:javascript
复制
let numbers = [1;2;2;3;3;3;4;5;5;]

如何生成一个字典,其中键是元素,值是元素在列表中发生的次数?

我悲伤的尝试:

代码语言:javascript
复制
let numbers = [1;2;2;3;3;3;4;5;5;]
numbers |> Seq.fold (fun accumulator element -> Map.add (element, element list???) 0)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-16 13:52:59

使用Seq.groupBy

代码语言:javascript
复制
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")

打印:

代码语言:javascript
复制
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:)

代码语言:javascript
复制
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")

打印:

代码语言:javascript
复制
1 - 1
2 - 2
3 - 3
4 - 1
5 - 2

链接:

https://dotnetfiddle.net/yFw4Jq

票数 3
EN

Stack Overflow用户

发布于 2016-02-16 17:46:13

示例代码使用Map,但是,假设如您所说的Dictionary,可以编写这样的函数:

代码语言:javascript
复制
Seq.countBy id >> dict
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35434285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档