func sortArray<T: Comparable>(_ array: [T]) -> [T] {
var sortedArray = array
for i in 0..<sortedArray.count - 1 {
for j in i + 1..<sortedArray.count {
if sortedArray[i] > sortedArray[j] {
(sortedArray[i], sortedArray[j]) = (sortedArray[j], sortedArray[i])
}
}
}
return sortedArray
}
泛型在这个场景中的优势
- 代码复用:通过使用泛型,一个排序函数可以适用于任何遵循
Comparable
协议的类型数组,而不需要为每个具体类型都写一个单独的排序函数,大大提高了代码的复用性。
- 类型安全:泛型在编译时就确定了类型,确保了传入的数组元素类型的一致性,避免了运行时类型错误。
注意事项
- 类型约束:泛型参数
T
必须遵循 Comparable
协议,这是因为排序操作依赖于元素之间的比较。如果不添加这个约束,代码将无法编译,因为编译器不知道如何比较 T
类型的元素。
- 性能:虽然泛型提供了通用性,但在某些情况下,针对特定类型的优化版本可能会有更好的性能。例如,针对
Int
类型数组的排序可能会比泛型排序更高效,因为可以利用 Int
类型的特定属性进行优化。但这种优化通常是在性能敏感的场景下才需要考虑。