栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何计算Swift数组中元素的出现次数?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何计算Swift数组中元素的出现次数?

Swift 3和Swift 2:

您可以使用类型的字典

[String: Int]
来为您的每个项目建立计数
[String]

let arr = ["FOO", "FOO", "BAR", "FOOBAR"]var counts: [String: Int] = [:]for item in arr {    counts[item] = (counts[item] ?? 0) + 1}print(counts)  // "[BAR: 1, FOOBAR: 1, FOO: 2]"for (key, value) in counts {    print("(key) occurs (value) time(s)")}

输出:

BAR occurs 1 time(s)FOOBAR occurs 1 time(s)FOO occurs 2 time(s)

斯威夫特4:

Swift 4 引入了(SE-0165)可以在字典查找中包含默认值的功能,并且可以使用诸如

+=
和的操作来改变结果值
-=
,因此:

counts[item] = (counts[item] ?? 0) + 1

变成:

counts[item, default: 0] += 1

这使得使用

forEach
以下命令在一条简洁的代码行中轻松进行计数操作:

let arr = ["FOO", "FOO", "BAR", "FOOBAR"]var counts: [String: Int] = [:]arr.forEach { counts[$0, default: 0] += 1 }print(counts)  // "["FOOBAR": 1, "FOO": 2, "BAR": 1]"

斯威夫特4:

reduce(into:_:)

Swift 4引入了一个新版本,

reduce
该版本使用
inout
变量来累积结果。使用它,计数的创建真正变成了一行:

let arr = ["FOO", "FOO", "BAR", "FOOBAR"]let counts = arr.reduce(into: [:]) { counts, word in counts[word, default: 0] += 1 }print(counts)  // ["BAR": 1, "FOOBAR": 1, "FOO": 2]

或使用默认参数:

let counts = arr.reduce(into: [:]) { $0[$1, default: 0] += 1 }

最后,您可以将其扩展为,

Array
以便可以在包含
Hashable
项的任何数组上调用它:

extension Array where Element: Hashable {    var histogram: [Element: Int] {        return self.reduce(into: [:]) { counts, elem in counts[elem, default: 0] += 1 }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/426950.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号