有这么一个数组,每个元素都是由元组构成的,其中每个元组有两个值,第一个值是宽,第二个值是高
let boxes: Array = [(2, 1), (1, 1), (4, 1), (6, 1), (4, 3)]
现在需要排序,以0相等,以$1从大到小排序
怎么实现呢?
如果这个数组不是元组的话,我们可以直接使用.sorted排序
但是这是数组的元素是由元组构成的,所以,我们应该使用函数或者闭包分情况讨论,把可能出现的两种情况都写出来,就可以了。
那么,存在那两种情况呢?
1、先按照宽度从大到小排。
2、若宽度相等,则按照高度从大到小拍。
那么,我们就可以设置一个闭包函数了(因为函数写的字比较多,所用闭包)
先声明一个常量let sortedBoxes
然后使用sorted方法
let sortedBoxes = boxes.sorted{ lhs, rhs in
if lhs.0 > rhs.0 {
return true
} else if {
lhs.0 == rhs.0 && lhs.1 > rhs.1
return true
} else {
return false
}
这个闭包的意思就是前面说的两种情况。
只有这两种情况是true,其他都是false。
运行之后就可以排序了。
如果写函数的话,会多写几行,其实完全可以省略
func 排序(_, boxes: Array) -> Array {
return boxes.sorted { lhs, rhs in
if lhs.0 > rhs.0 {
return true
} else if ......
后面就都一样了。
需要注意的是return后面是用参数代替了Array