zoukankan      html  css  js  c++  java
  • Swift Tips

    在开发中,数组这个概念我们应该很熟悉了,Objective-C 中为我们提供了 NSArray 作为数组的实现。大家应该对很熟悉了。而在 Swift 中,为我们提供了它自己对于数组的实现,也是这里我们要介绍的,就是 Array 类。

    Array 的官方文档可以参看这里: SwiftStandardLibraryReference

    废话不多说,下面就开始我们的主题啦。

    <!-- more -->

    创建数组

    我们要使用一个数组,首先要做的就是创建它,Array 类为我们提供了几种方式来创建:

    var emptyArray = Array<Int>()
    

    我们这里声明了一个空的数组,数组的元素是 Int 类型,我们还可以这样初始化数组:

    var equivalentEmptyArray = [Int]()
    

    这样的写法和前面那个的效果是一样的。我们还可以这样进行初始化:

    let numericArray = Array(count: 4, repeatedValue: 5)
    // 数组元素为 [5,5,5,5]
    

    这个初始化方法,里面使用 4 个数字 5 来填充这个数组,并且数组元素的类型为 Int

    访问数组的元素

    我们的数组创建完成后,我们就可以通过下标来引用它里面的元素了:

    var weekdays = ["monday","tuesday","wednesday","thursday"]
    println(weekdays[1])   //输出 tuesday
    

    我们还可以通过下标来修改数组中的元素:

    var weekdays = ["monday","tesday","today","thursday"]
    weekdays[2] = "wednesday"  
    //修改后的数组元素 ["monday","wednesday","today","thursday"]
    

    但我们不能通过下标修改 let 关键字定义的常量数组:

    let weekdays = ["monday","tesday","today","thursday"]
    weekdays[2] = "wednesday"   //报错
    

    Swift 还提供了范围的下标访问:

    let weekdays = ["monday","wednesday","today","thursday"]
    let subdays = weekdays[0...2]
    //subdays 的数组元素 ["monday","wednesday","today"]
    

    我们用 arr[0...2] 这种形式的索引,就可以访问到数组中某一区域的元素了,这点从上面的例子中就能看出来啦。

    我们甚至还可以用范围索引来设置数组的元素,前提是这个数组是用 var 定义的:

    var weekdays = ["monday","wednesday","today","thursday"]
    weekdays[0...1] = ["today","tomorrow"]
    //数组的元素 ["today","tomorrow","today","thursday"]
    

    添加删除元素

    Swift 中的 Array 还为我们提供几个相关的方法,append 用于向数组添加元素,添加的元素在数组的最后。insert 方法向数组指定的索引插入元素, removeAtIndex 方法用来删除指定索引位置的元素。 removeLast 用于删除数组最后一个元素。我们来看一下如何使用这些方法:

    var numbers = [2,4,6,8,10]
    numbers.append(12)              //numbers: [2,4,6,8,10,12]
    numbers.insert(5, atIndex: 2)   //numbers: [2, 4, 5, 6, 8, 10, 12]
    numbers.removeAtIndex(4)        //numbers: [2, 4, 5, 6, 10, 12] 
    numbers.removeLast()            //numbers: [2, 4, 5, 6, 10]
    

    这几个方法使用起来非常方便,也满足了我们对数组的大部分操作要求,接下来我们继续。

    查询数组状态

    Array 提供了 count 属性来返回数组当前的元素个数。 isEmpty 属性用于判断数组是否为空。

    var array = [5,4,3,2,1]
    println(array.count)        // 5
    println(array.isEmpty)      // false
    array = []
    println(array.isEmpty)      // true
    

    数组算法操作

    sort 方法

    除了上面那些使用的方法,Array 还提供了几个方便的算法操作,sort 方法用于对数组进行排序,我们可以很轻松的就实现数对数组的升序和降序排列:

    var array = [4,5,6,8,3,1,5,7,9]
    array.sort {$0 < $1}    
    print(array)            //array: [1, 3, 4, 5, 5, 6, 7, 8, 9]
    

    sort 方法接受一个回调方法,用于返回两个值的比较顺序,我们上面的例子中,判断第一个参数是否比第二个参数的值小,这样就形成了一个升序排列。

    sorted 方法

    Array 还提供了一个 sorted 方法,这个方法和 sort 方法基本一样,也是接受一个回调方法用于确定元素间的顺序。唯一一点不同的是,sort 是对数组本身进行排序,也就是意味着 sort 方法会修改数组本身的内容。 而 sorted 就不会修改原有的数组,而是返回一个经过排序处理后的新的数组:

    var array = [4,5,6,8,3,1,5,7,9]
    var newArray = array.sorted {$0 < $1}    
    print(newArray)            //array: [1, 3, 4, 5, 5, 6, 7, 8, 9]
    

    使用 sorted 方法后,我们得到了一个新的数组。

    reverse 方法

    Arrayreverse 方法可以将数组中的元素倒序排列:

    let array = [1, 2, 3, 4, 5]
    let reversedArray = array.reverse()
    // reversedArray = [5, 4, 3, 2, 1]
    

    通过这个方法,我们将数组中的元素顺序颠倒了。

    filter 方法

    Array 还提供了一个 filter 方法,可以根据传入的回调方法的判断标准来筛选数组的元素,并返回一个新的数组:

    var array = [1, 2, 3, 4, 5,7,8,9]
    var newArr = array.filter({$0 % 2 == 0})    //[2,4,8]
    

    这个 filter 方法,筛选出 array 数组中的所有偶数,并返回给新的 newArr 数组。

    map 方法

    是不是觉得 Array 提供了很多便捷的方法呢,还远不止如此呢,这个 map 方法就更加强大了。它能够根据制定的规则对数组的元素进行处理:

    var array = [1,3,5,7]
    var newArr = array.map({$0 * 2})    //[2, 6, 10, 14]
    

    这个 map 方法的调用将数组中的所有元素都乘以2,返回了一个新的数组。

    怎么样,非常方便吧,有没有感觉这些便捷的方法省去了你很多的 for 循环之类的东西呢,从此你的代码更加简洁明快了,心情也更为舒畅了吧。接下来我们再来了解一个。

    reduce 方法

    这个方法更有意思,reduce 的字面为减少执意,用在我们这里就是通过一个处理方法,将数组中所有的元素进行处理,并最终产生一个值:

        let array = [1, 2, 3, 4, 5]
        let addResult = array.reduce(0) { $0 + $1 }
        //addResult: 15
    

    看过上面这段代码就很明白了吧,通过 { $0 + $1 } 这个闭包方法,我们将数组中所有的元素累加起来,并返回给一个新的变量。

    对操作符的支持

    到这里,你是不是觉得 Array 很好用呢,还不止如此,Swift 中的 Array 还提供了对操作符的支持,我们可以使用 += 操作符,来对两个数组进行连接:

    var array = [0, 1, 2, 3]
    array += [4, 5, 6]
    // array is [0, 1, 2, 3, 4, 5, 6]
    

    很方便吧。

    好了,讲了这么多,相信大家对 Array 类已经有了一个大概的了解了。为我们提供的这些方法,可以很明显的减少我们的代码量,提升我们的开发效率。比如我们刚刚提到的 += 操作符的支持。如果没有这个操作符支持,我们要对两个数组进行连接的话,我们就需要写 for 循环,还有好多冗余的代码。

    相信如果大家理解了这些方法的使用,它们就能够帮助你大大的提高开发效率。起到事半功倍的作用。这篇文章只是对 Array 类的一个大体的介绍,关于 Array,相信还有很多有待发掘的东西,这个机会就交给电脑前的你们了,欢迎大家把在开发过程中关于 Array 的问题和经验在下面留言和大家一起分享交流。

    更多文章请访问: www.theswiftworld.com

    更多好文,扫码关注微信公众号:

  • 相关阅读:
    【设计模式】—— 单例模式Singleton
    【java开发系列】—— 深克隆和浅克隆
    【设计模式】—— 原型模式Prototype
    ArcMap 导入Excel坐标数据
    如何将XML文件导入Excel中
    ArcGIS API for Javascript之专题图的制作(四)热力图渲染(上)
    ArcGIS js api 手动构建FeatureLayer
    word怎样从第三页开始设置页码
    ArcGIS API for JS4.7加载FeatureLayer,点击弹出信息并高亮显示
    [转载]ArcGIS SERVER 9.3如何清除REST缓存
  • 原文地址:https://www.cnblogs.com/theswiftworld/p/4237881.html
Copyright © 2011-2022 走看看