我正在寻找一个表达式,将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}
但是这不能编译,我认为因为不可能解构数组,至少以这种方式,并且似乎没有一种干净/有意义的方法将它转换为元组。
我错过了什么?我知道这里有一个优雅的表达方式。
答案 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)