MST

星途 面试题库

面试题:Swift中泛型的深度应用

假设你要实现一个通用的排序算法,可以对任何遵循Comparable协议的类型数组进行排序。请使用Swift泛型来实现这个排序函数,并解释泛型在这个场景中的优势和注意事项。
10.9万 热度难度
编程语言Swift

知识考点

AI 面试

面试题答案

一键面试
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
}

泛型在这个场景中的优势

  1. 代码复用:通过使用泛型,一个排序函数可以适用于任何遵循 Comparable 协议的类型数组,而不需要为每个具体类型都写一个单独的排序函数,大大提高了代码的复用性。
  2. 类型安全:泛型在编译时就确定了类型,确保了传入的数组元素类型的一致性,避免了运行时类型错误。

注意事项

  1. 类型约束:泛型参数 T 必须遵循 Comparable 协议,这是因为排序操作依赖于元素之间的比较。如果不添加这个约束,代码将无法编译,因为编译器不知道如何比较 T 类型的元素。
  2. 性能:虽然泛型提供了通用性,但在某些情况下,针对特定类型的优化版本可能会有更好的性能。例如,针对 Int 类型数组的排序可能会比泛型排序更高效,因为可以利用 Int 类型的特定属性进行优化。但这种优化通常是在性能敏感的场景下才需要考虑。