分配最小最大变量/解构数组的好方法?

时间:2015-01-09 10:39:17

标签: swift

我正在寻找一个表达式,将2个数字中最小和最大的数字分配给变量。

有几种方法可行

let a = 2
let b = 1

let (min, max) = (min(a, b), max(a, b))

但我想要一些更灵活的东西,例如

let sorted = [a, b].sorted{$0 < $1}
let (min, max) = (sorted.first, sorted.last)

但它是2行...我正在寻找类似的东西:

let (min, max) = [a, b].sorted{$0 < $1}

但是这不能编译,我认为因为不可能解构数组,至少以这种方式,并且似乎没有一种干净/有意义的方法将它转换为元组。

我错过了什么?我知道这里有一个优雅的表达方式。

1 个答案:

答案 0 :(得分:2)

我只是做一个你的(编辑前)第一个变体:

let (min,max) = a < b ? (a,b) : (b,a)

如果你这么做了,你可以将它包装在一个通用函数中,使它更整洁:

func minmax<T: Comparable>(a: T, b: T) -> (T,T) {
    return a < b ? (a,b) : (b,a)
}

这使得这在呼叫网站上非常好看和可读:

let (min,max) = minmax(a, b)