Swift按照数组元素出现的次数及大小排序
2016-07-21 12:05
549 查看
要求如下:
例子:
一种解决方法是:
别的网友提供了更直观更简单的方法:
注意后一种解决办法只能在Swift2.x中运行,如果要在Swift3中运行需要略做修改,请参考我写的另一篇博文:
Swift3中如何为Array写一个限定Type的扩展
1、已知一个数组,按照单个元素在数组中出现的次数作为重新排序的依据,个数多的排在前面 2、相同个数时候,元素值大的排前面
例子:
[1, 2, 2, 3, 5, 5] 经过计算得到的结果是: [5, 5, 2, 2, 3, 1]
一种解决方法是:
import UIKit extension 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的扩展
相关文章推荐
- Swift传值
- 每个ios开发者都应该知道Top 10 Swift三方库
- swift - UIButton 的用法
- Swift基础(十二)UI基础--AutoLayout
- 黑马程序员:开源Swift 3.0微博项目 ,做最具情怀的IT教育
- swift - UILabel的用法
- 关于swift的?与!
- Swift3中如何为Array写一个限定Type的扩展
- Swift3中如何为Array写一个限定Type的扩展
- Swift3中如何为Array写一个限定Type的扩展
- swift中使用OC的方法;在OC中调用swift方法
- 半吊子学习Swift--天气预报程序-获取天气信息
- Swift - 使用NSNotificationCenter发送通知,接收通知
- Swift - 文件,文件夹操作大全
- swift 单例写法
- Swift_枚举
- swift教程【入门】 swift 函数之旅
- Swift学习(六)-循环
- Swift基础(十一)多线程
- Swift学习(五)-逻辑判断