Swift: 数组无序排列,自定义模型去重,冒泡排序

前言:在开发过程中,不可避免会对一些基本类型做特殊处理,本文今天主要列举三种模型处理

1.数组无序排列

// 数组无序排列
    public func zmShuffle() -> Array {
        var list = self
        for index in 0...list.count {
            let newIndex = Int(arc4random_uniform(UInt32(list.count-index))) + index
            if index != newIndex {
                list.swapAt(index, newIndex)
            }
        }
        return list
    }

swapAt 方法可以实现两个元素的位置交换,也是swift4新特性之一,详情可查看
最全的 Swift 4 新特性解析

2.去重(自定义模型,根据给定的规则进行去重)

//该函数的参数filterCall是一个带返回值的闭包,传入模型Element,返回一个E类型
    public func handleFilter<E: Equatable>(_ filterCall: (Element) -> E) -> [Element] {
        var temp = [Element]()
        for model in self {
            //调用filterCall,获得需要用来判断的属性E
            let identifer = filterCall(model)
            //此处利用map函数 来将model类型数组转换成E类型的数组,以此来判断
            if !temp.map( { filterCall($0) } ).contains(identifer) {
                temp.append(model)
            }
        }
        return temp
    }

去重函数理解起来比较简单,就是传入指定模型,通过指定模型,去重,生成新的数组

3.冒泡排序

// 根据函数返回的Int,去区分,可使用在字符串根据count排序,或者int类型排序
public func bubbleSort(_ filterCall: (Element) -> Int) -> [Element] {
        var temp: [Element] = self
        for i in 0...self.count - 1 {
            for j in (i...self.count - 1).reversed() {
                // rs 必须写到内循环里边
                let rs = filterCall(temp[i])
                let js = filterCall(temp[j])
                if rs > js {
                    let t = temp[i]
                    temp[i] = temp[j]
                    temp[j] = t
                }
            }
        }
        return temp
    }

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

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,679评论 1 32
  • 参考资源《swifter》https://github.com/iOS-Swift-Developers/Swif...
    柯浩然阅读 1,536评论 0 6
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 3,151评论 2 9
  • ArrayList ArrayList就是传说中的动态数组,就是Array的复杂版本,它提供了如下一些好处:动态的...
    史路比阅读 298评论 0 0
  • 一、tomcat安装与环境配置 二、在ide中创建ServletWeb项目 三、创建类继承 HttpServlet...
    Nic_ofh阅读 360评论 0 0

友情链接更多精彩内容