Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Swift 算法实战之路:基本语法与技巧大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

Swift是苹果新推出的编程语言,也是苹果首个开源语言。相比于原来的Objective-C,Swift要更轻便和灵活。笔者最近使用Swift实践了大量的算法(绝大部分是硅谷各大公司的面试题),将心得体会总结于下。此文并不是纯粹讨论Swift如何实现某一个具体的算法或者数据结构,如冒泡排序、深度优先遍历,或是树和栈,而是总结归纳一些Swift常用的语法和技巧,以便大家在解决面试题中使用。 基本语法

Swift是苹果新推出的编程语言,也是苹果首个开源语言。相比于原来的Objective-C,Swift要更轻便和灵活。笔者最近使用Swift实践了大量的算法(绝大部分是硅谷各大公司的面试题),将心得体会总结于下。此文并不是纯粹讨论Swift如何实现一个具体的算法或者数据结构,如冒泡排序、深度优先遍历,或是树和栈,而是总结归纳一些Swift常用的语法和技巧,以便大家在解决面试题中使用。


基本语法

先来看下面一段@L_@R_450_11263@_2@:

@H_675_91@

上面@L_@R_450_11263@_2@实现了一个非常简单的功能,就是交换一个数组中的两个值。乍一看非常正确,实际上存在以下几个问题:

  • 在第一个参数前应该加上 inout 关键字。因为在Swift中,struct都是按值传递,class是按引用传递;数组和字典都是struct。所以要改变原来的chars数组,在其前部加入inout关键字,表示是按引用传递。

  • p 和 q 之前应该加入下划线。Swift函数的第一个参数是局部(local)变量,而后续参数都是外部(external)变量,外部变量必须声明。如果在p和q前加上下划线,则在调用函数时无需声明外部变量,这样调用起来更简便

  • temp前的var应该改为let。let用于声明常量(constant),var用于声明变量(variable)。swap函数中,temp并未进行修改,所以应当视为常量,用let来声明。

  • 改过后的@L_@R_450_11263@_2@为

1
2
3
4
5
6
7
func swap(chars:[Character],  p: Int, q: int) {
   var  temp = chars[p]
   chars[p] = chars[q]
   chars[q] = temp
}
// Assume array is a character array and it has enough elements
swap(array, p: 0, q: 1)
@H_675_91@
  • 再来看一段@L_@R_450_11263@_2@

  • 1
    2
    3
    4
    5
    6
    7
    func swap(inout chars:[Character],  _ p: Int, _ q: int) {
       let temp = chars[p]
       chars[p] = chars[q]
       chars[q] = temp
    }
    // Assume array is a character array and it has enough elements
    swap(&array, 0, 1)
    @H_675_91@
  • 这里在 x -= 1 处会报错。原因是函数中所有的参数是常量(let),是不可以修改的。解决方法是在函数中写上var x = x,之后就可以对 x 进行修改

  • 循环

  • Swift循环分为for和while两种,注意他们的结构跟传统的 Java,C/C++有很大区别,笔者将其总结如下:

  •                       

    Swift 算法实战之路:基本语法与技巧

  • 以上@L_@R_450_11263@_2@非常简单。需要说明的有两个,一个是 for _ in 0 ..< names.count { } 。当我们不需要数组中每一个具体的元素值时,我们就可以用下划线来代表序号。

    一个是是 repeat { } while i < names.count 。这个相当于我们熟悉(java)的 do { } while (i < names.length)。

    一个是是 repeat { } while i < names.count 。这个相当于我们熟悉(java)的 do { } while (i < names.length)。

    排序

    swift排序效率很高,写法也很简洁。笔者将其总结如下

    Swift 算法实战之路:基本语法与技巧

    活用Guard语句

    使用Guard语句可以让逻辑变得非常清楚,尤其是在处理算法问题的时候,请看下面的@L_@R_450_11263@_2@

           

    Swift 算法实战之路:基本语法与技巧


    面这段@L_@R_450_11263@_2@是求字符串needle在字符串haystack里首次出现的位置。我们发现for循环中的嵌套非常繁琐,但是如果使用Guard语句@L_@R_450_11263@_2@会变得清晰很多:

    Swift 算法实战之路:基本语法与技巧

    Guard语句的好处是判断条件永远是我们希望的条件而不是特殊情况,且成功避免了大量的if嵌套。

    另外在上面@L_@R_450_11263@_2@中,为何要将字符串转化成数组进行处理?因为Swift中没有方法能够以O(1)的时间复杂度取得字符串中的字符,我们常用的@R_944_10495@ng.starTindex.advancedBy(n)方法,其时间复杂度为O(n)。所以笔者在这里以空间换时间的方法进行了优化。

    微信扫一扫

    订阅每日swift课程及ios开发热点资讯

    欢迎大家关注我们的新公众号

    Swift 算法实战之路:基本语法与技巧

    大佬总结

    以上是大佬教程为你收集整理的Swift 算法实战之路:基本语法与技巧全部内容,希望文章能够帮你解决Swift 算法实战之路:基本语法与技巧所遇到的程序开发问题。

    如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

    本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
    如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
    6
    func toZero(x: int) -> Int {
       while  x > 0 {
         x -= 1
       }
       return  x
    }