Swift按照数组元素出现的次数及大小排序

Swift按照数组元素出现的次数及大小排序,第1张

概述要求如下: 1、已知一个数组,按照单个元素在数组中出现的次数作为重新排序的依据,个数多的排在前面2、相同个数时候,元素值大的排前面 例子: [1, 2, 2, 3, 5, 5]经过计算得到的结果是:[5, 5, 2, 2, 3, 1] 一种解决方法是: import UIKitextension Sequence where Iterator.Element == Int{ pr

要求如下:

1、已知一个数组,按照单个元素在数组中出现的次数作为重新排序的依据,个数多的排在前面2、相同个数时候,元素值大的排前面

例子:

[1,2,3,5,5]经过计算得到的结果是:[5,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,3,4,5,6,6]print(ary.sortByRepeatCount())//输出 "[6,6,1,4,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,6]let beta = [6,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按照数组元素出现的次数及大小排序全部内容,希望文章能够帮你解决Swift按照数组元素出现的次数及大小排序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/web/1073899.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存