SwiftUI算法之如何统计数组和集合中某元素出现的次数

需求分析

为所有集合编写一个扩展,该扩展以数组的形式返回N个最小的元素
最小的优先,其中N是整数参数

  • [1, 2, 3, 4].smallN(count: 3) 返回 [1, 2, 3].
  • ["q", "f", "k"].smallN(count: 10) 返回 [“f”,“k”, “q”].
  • [256, 16].smallN(count: 3) 返回 [16, 256].
  • String.small(count: 3) 返回 an empty array.

推荐文章

解决方案

在集合中找到单个最小值很容易;在集合中查找两个最小值比较困难,因为如果有合适的较小新值,则需要将最小值移动到较小值
再次找到N个最小的数字更加困难,或者如果您遵循相同的技术,则将更困难。与其保留单个变量的最小值和较小,还不如保留一个由小值组成的排序数组,在​​新值插入时将它们插入正确的位置。这并不难编写代码,但也不是那么快,而且如果您必须插入大量数字,它将变得非常灾难性地缓慢

要计算整数中特定数字的数量,最简单的方法是将其转换为字符串,然后检查每个字符。 Swift仅允许您在指定正确的约束的情况下执行此操作,应将约束设为Iterator.Element == Int,如下所示

一个既简单又快得多的解决方案是使用内置的sorted()方法,后跟prefix(),该方法返回集合中的前N个项目。如果项目数量少于您的要求,prefix()将返回尽可能多的内容,非常适合此需求。

代码

extension Collection where Iterator.Element: Comparable {
 func smallN(count: Int) -> [Iterator.Element] {
let sorted = self.sorted()
return Array(sorted.prefix(count)) }
}

技术交流

QQ:3365059189
SwiftUI技术交流QQ群:518696470

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容