Swift按照数组元素出现的次数及大小排序
来源:互联网 发布:overture mac 破解版 编辑:程序博客网 时间:2024/06/05 03:01
要求如下:
1、已知一个数组,按照单个元素在数组中出现的次数作为重新排序的依据,个数多的排在前面2、相同个数时候,元素值大的排前面
例子:
[1, 2, 2, 3, 5, 5]经过计算得到的结果是:[5, 5, 2, 2, 3, 1]
一种解决方法是:
import UIKitextension Sequence where Iterator.Element == Int{ private func removeRepeats()->[Int]{ let set = Set(self) return Array(set).sorted {$0>$1} } private func countFor(value:Int)->Int{ return filter {$0 == value}.count } func sortByRepeatCount()->[Iterator.Element]{ var wets = [[Int]]() let clearedAry = removeRepeats() for i in clearedAry{ wets.append([i,countFor(value: i)]) } wets = wets.sorted { $0[1] > $1[1] } var result = [Int]() for x in wets{ let i = x[0] let count = x[1] for _ in 0..<count{ result.append(i) } } return result }}var ary = [1,1,2,1,3,3,4,5,4,6,6,6]print(ary.sortByRepeatCount())//输出 "[6, 6, 6, 1, 1, 1, 4, 4, 3, 3, 5, 2]\n"
别的网友提供了更直观更简单的方法:
extension SequenceType where Generator.Element : Hashable { func frequencies() -> [Generator.Element:Int] { var results : [Generator.Element:Int] = [:] for element in self { results[element] = (results[element] ?? 0) + 1 } return results }}let alpha = [2,8,2,6,1,8,2,6,6]let beta = [6,6,6,2,2,2,8,8,1]let sorted = alpha.frequencies().sort { if $0.1 > $1.1 { // if the frequency is higher, return true return true } else if $0.1 == $1.1 { // if the frequency is equal return $0.0 > $1.0 // return value is higher } else { return false // else return false }}
注意后一种解决办法只能在Swift2.x中运行,如果要在Swift3中运行需要略做修改,请参考我写的另一篇博文:
Swift3中如何为Array写一个限定Type的扩展
0 0
- Swift按照数组元素出现的次数及大小排序
- python字典分别按照key和value升序或者降序排列--以给定一个含有重复元素的数组list,按照其出现次数大小降序输出
- 按数组中元素出现的次数排序
- 一个一维整形数组,若干个数字,统计数组中不同的数字出现的次数,并按照出现频率从小到大排序输出,相同频率按数字大小排序输出
- 数组元素出现次数
- 去除数组中重复项,并统计重复出现次数最多的元素及重复次数
- 算法 n大小的数组中找出出现3/n次数以上的元素
- C# 判断数组元素出现的次数
- 统计`数组`元素出现的次数
- 数组中元素出现的次数
- HashMap 排序,按照 value,找出字符出现次数最多的
- java读取文件内容按照值出现的次数排序
- 有序数组找到出现次数最高的元素和次数
- python统计数组元素出现次数以及排序
- python 统计数组中元素出现次数并进行排序
- 求一个数组中重复元素出现最多值,最大的元素及出现次数,次数相同时,取最大值,优先考虑次数
- 数组中出现次数最多的数及出现次数
- 找出有序元素数组中指定元素出现的次数
- RMQ--ST表算法理解
- npm查看全局安装过的包
- MFC中的Document-View结构
- 细说ItemInfo
- ECSHOP如何解决Deprecated: preg_replace()报错
- Swift按照数组元素出现的次数及大小排序
- Java
- 【技术贴】聊聊ArcGIS Runtime for Xamarin
- label
- 整理查看mysql数据库基本信息SQL语句
- Android屏幕尺寸适配
- SpringMVC学习笔记
- js的原型继承
- 用 Selenium 自动化验收测试