Swift3中如何为Array写一个限定Type的扩展

我们知道Swift可以扩展已存在的类或结构,这些类或结构可以存在于标准库(或称为核心库)中.如果结构是一个集合类型(比如Array)就更有趣了.我们想尝试写一个限定Type数组的扩展,So我们就拿Array< Int>为例吧.

本猫想是不是可以这么写:

extension Array<Int>{
    //....
}

不过显然不可以 :[

翻看了一下Apple官方的Swift编程语言,一无所获.于是上网溜了一圈,发现一个可行的解决方法,是滴,必须要用where子句:

extension _ArrayType where Element == Int{
    func count(index:Int)->Int{
        print("In _ArrayType")
        return 11*11
    }
}

[1,2,3].count(
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 下面是一个使用 Swift的冒泡排序算法示例: ```swift func bubbleSort(_ array: inout [Int]) { guard array.count > 1 else { return } for i in 0..<array.count { var swapped = false for j in 1..<array.count - i { if array[j] < array[j - 1] { array.swapAt(j, j - 1) swapped = true } } if !swapped { return } } } ``` 这个函数接受一个 Int 数组作为参数,并将其原地排序。它使用两个嵌套的循环来比较和交换相邻的元素,直到数组完全排序为止。在第一次遍历期间,最大的元素会被移动到数组的末尾。在第二次遍历期间,除了最大的元素之外的最大元素会被移动到数组的末尾,以此类推。当没有元素需要交换时,算法将退出,因为数组已经排序完成。 以下是示例用法: ```swift var array = [3, 2, 1, 4, 5] bubbleSort(&array) print(array) // [1, 2, 3, 4, 5] ``` ### 回答2: 冒泡排序是一种简单的排序算法,它通过多次遍历待排序数组,每次比较相邻的两个元素,若顺序不对则交换位置,直到整个数组有序为止。 下面是使用Swift语言实现冒泡排序的示例代码: ```swift func bubbleSort(_ array: inout [Int]) { let n = array.count guard n > 1 else { return } for i in 0..<n-1 { var isSwapped = false for j in 0..<n-i-1 { if array[j] > array[j+1] { array.swapAt(j, j+1) isSwapped = true } } // 如果某次遍历没有发生交换,说明数组已经有序,可以提前退出循环 if !isSwapped { break } } } var numbers = [5, 3, 8, 4, 2] bubbleSort(&numbers) print(numbers) // 输出结果: [2, 3, 4, 5, 8] ``` 在上述代码,我们定义了一个名为`bubbleSort`的函数,参数为一个`inout`修饰的整型数组。函数使用了嵌套的循环来进行冒泡排序,外层循环控制遍历的轮数,内层循环用于比较相邻元素并交换位置。变量`isSwapped`用于标记某次遍历是否发生了交换,用于优化算法的性能。最后,通过调用`bubbleSort`函数并传入一个需要排序的数组,我们可以得到一个有序的数组。 这是一个简单的用Swift实现冒泡排序的例子,希望能对你有所帮助。 ### 回答3: 冒泡排序是一种简单的排序算法,它重复地遍历要排序的列表,比较相邻的两个元素,并按照从小到大的顺序交换它们,直到整个列表排序完成。以下是使用Swift语言编的冒泡排序算法: ```swift func bubbleSort(_ array: [Int]) -> [Int] { var sortedArray = array let n = sortedArray.count var isSwapped: Bool for i in 0..<n-1 { isSwapped = false for j in 0..<n-i-1 { if sortedArray[j] > sortedArray[j+1] { sortedArray.swapAt(j, j+1) isSwapped = true } } if !isSwapped { break } } return sortedArray } let unsortedArray = [5, 2, 9, 1, 7] let sortedArray = bubbleSort(unsortedArray) print(sortedArray) // 输出 [1, 2, 5, 7, 9] ``` 在这个实现,我们定义了一个bubbleSort函数,接受一个整数数组作为参数,并返回排序后的数组。我们首先将要排序的数组复制到一个临时数组sortedArray,然后使用两个嵌套的for循环进行比较和交换操作。第一个for循环定义了外部迭代变量i,表示迭代次数,第二个for循环定义了内部迭代变量j,表示每一轮比较的次数。在每一轮的内部循环,我们比较相邻的两个元素,如果前一个元素大于后一个元素,则交换它们的位置,直到内部循环结束。如果在一轮内部循环没有进行任何交换操作,说明数组已经完全排序好了,因此我们使用isSwapped变量来进行判断,如果没有进行交换操作,则说明排序已经完成,可以提前终止外部循环。 最后,我们用一个示例进行测试。我们定义了一个未排序的整数数组unsortedArray,并将其传递给bubbleSort函数进行排序。排序后的结果存储在sortedArray,最后打印该数组。输出结果应该为[1, 2, 5, 7, 9]。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大熊猫侯佩

赏点钱让我买杯可乐好吗 ;)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值