Swift whit Xcode 使用冒泡排序,自定义Array<Any>数组排序方法,返回排序后的数组swift
1、设计思想:数组
一、定义一个方法,此方法接受一个inout标识的可变数组参数和变量方法声明(变量方法做用:参数值大小比较)测试
方法参数说明:spa
1-一、数组参数要设为可变参数 在类型前用inout标记,这样数组参数的索引值就能够进行换位操做,不然在Swift的参数是不可变的,只能在方法体中定义一个新变量将数据参数赋给新声明定义的变量;设计
1-二、变量方法sortClosure的做用,用来判断数组指定索引值的大小比较,返回true则数组不换位不然换位code
sortClosure方法参数说明:对象
1-2-一、接受任意类型的两个对象值,用于mySortedArray方法索引位置对象的传参,返回Bool值blog
二、返回类型:排序后的数组排序
2、实现代码索引
func mySortedArray(数组 array:inout Array<Any>,sortClosue:(Any,Any)->Bool )->Array<Any> { for i in 0 ..< array.count { //若是数组中只有一个对角则跳出循环 if 0==array.count-1 { break } //Swift中for循环中没必要考虑i和j变量nil或越界问题,Swift会自动处理 for j in i+1 ..< array.count { if sortClosue(array[i],array[j]){} //若是对比值为false则交换数据索引指定值Val的位置 else{ array.swapAt(i, j) } } } return array }
3、场景实试
一、Int数组测试
var list: Array<Any>=[3,5,2,1,4,2,53,2,4,787,5,4,3] list=mySortedArray(数组: &list, sortClosue: {(minVal:Any,maxVal:Any) in return maxVal as! Int > minVal as! Int}) print(list)
二、对象数组测试
class Student{ var name:String//姓名 var achievment:UInt//成绩 init(name:String,achievment:UInt) { self.name=name self.achievment=achievment } } var stuArr:Array<Any> = [Student.init(name: "明月", achievment: 98),Student.init(name: "赵六", achievment: 89),Student.init(name: "落花", achievment: 96),Student.init(name: "阿良", achievment: 90),Student.init(name: "张三", achievment: 78)] stuArr=mySortedArray(数组: &stuArr, sortClosue: {($0 as! Student).achievment > ($1 as! Student).achievment}) for student in stuArr { print((student as! Student).name,(student as! Student).achievment) }