Swift whit Xcode 使用冒泡排序,自定义Array<Any>数组排序方法,返回排序后的数组
Swift whit Xcode 使用冒泡排序,自定义Array<Any>数组排序方法,返回排序后的数组
一、设计思想:
1、定义一个方法,此方法接受一个inout标识的可变数组参数和变量方法声明(变量方法作用:参数值大小比较)
方法参数说明:
1-1、数组参数要设为可变参数 在类型前用inout标记,这样数组参数的索引值就可以进行换位操作,否则在Swift的参数是不可变的,只能在方法体中定义一个新变量将数据参数赋给新声明定义的变量;
1-2、变量方法sortClosure的作用,用来判断数组指定索引值的大小比较,返回true则数组不换位否则换位
sortClosure方法参数说明:
1-2-1、接受任意类型的两个对象值,用于mySortedArray方法索引位置对象的传参,返回Bool值
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 }
三、场景实试
1、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)
2、对象数组测试
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) }