美文网首页
数组、字典、集合(Three Primary Collectio

数组、字典、集合(Three Primary Collectio

作者: 查无此人123 | 来源:发表于2016-08-07 18:25 被阅读22次
    写在前头
    • 这章的题目叫Collection Type,我也不知道咋翻译,而且貌似Collection Type不止这三个,只是swift默认提供了这三种,至于有没有其它或者是自己定义的,也只能等以后来发现了,先暂时记在这里。
    • swift里的array,set,dictionary都是通过Generic Collections(泛集合?泛类型我也看了的,稍后会再写一篇泛类型的,但那个里面貌似也没讲很多这方面的)来实现的,这个暂时还不知道去哪可以考究到。
    • 能定义为常量最好定义为常量,因为定义成常量(Constant)swift会对其进行优化,而定义成变量则不会。
    • 字典(Dictionary)、集合(Sets)的文档我还没看,先放着,看完了再写吧。

    数组(Array)

    创建数组的几种方法

    • var someInt = [Int]()
    • var threeDoubles = [Double](count: 3, repeatedValue: 0.0) 创建装有三个重复的元素(0.0)的数组
    • var aNewArray = anArray + anotherArray 通过两个同类数组相加获得一个新的数组
    • var anArray: [String] = ["Egg","milk","cat"] 这里的[String]其实可以省略,swift有智能推测功能,可以直接根据你传入的元素类型,推测出这是个什么类型的数组

    注意:这里绝对不要使用这种方法var anArray = [],这个[]顶多也就是下面置空数组的时候用一下就好,我自己在xcode上实验过,如果你这么写,虽然不会报错,而且这样的确生成了一个新的数组,但这个anArray的类型并不是Array,而是NSArray,这个类是OC里的数组类型,两者不兼容,这我也实验过,比如用这个NSArray类型的数组去加上一个Array类型的数组,系统直接报错,而且也没有了swift那些增删改的方法,如果你要对它进行增删改需要使用OC的语法,所以,还是不要这样使用,毕竟我们已经开始使用swift了不是吗。

    数组的增删改查

      • .append(_:) 在数组的末尾增加一个元素
      • insert(_:atIndex:) 在特定的index位置插入一个元素,注意这个index不能超出数组所拥有的index值(也就是不能大于等于array.count-1)
      • += 给数组末尾插入若干个元素,这里实际上是运用上面创建数组的方式,两个数组相加得到一个新的数组
      • removeAtIndex(_:) 在特定index位置删掉一个元素,并返回这个被删掉的元素
      • removeLast() 删掉数组最后一个元素,并返回这个被删掉的元素
      • anArray = []注意这是在anArray之前已经被定义过才可以这样做,这样做是直接把数组里的内容都删光,但这个数组的类型还是与之前的类型保持一致,也就是说,之前里面放的是Int,现在依旧如此
      • anArray[0] = "Six eggs" 把index编号为0的元素替换成一个新的字符串“Six eggs”
      • anArray[4...6] = ["Bananas","Apples"] 把一片连续的数组元素进行集体替换赋值
      • 注意这里index不能超出数组所拥有的index值(也就是不能大于等于array.count-1)
      • var firstItem = anArray[0] 获取指定index下标位置的数组元素
      • .count 获取数组元素的数量
      • .isEmpty 检查数组中是否有元素,返回一个Bool值告诉你检查结果

    数组的遍历(Iterating Over an Array)

    注意:for-in循环是一种快速的遍历方法,但它却是一个可读不可写的循环,也就是说在for-in循环里,是没有办法对数组元素进行修改的。

    • for item in anArray {}
    • for (index, value) in anArray.enumerate() {}把元组(truple)和.enumerate()结合起来取出数组的元素和对应的下标同时取出来

    另:用for-in对数组进行遍历的时候有一个特殊情况,如果某array以anArray[2..<array.count]这种范围的形式在for-in声明里使用的话,是会被swift重新视为一个新的数组。

    而在for-in以外的其它地方,则不是,而是生成一个新的类型ArraySlice(数组片段)。看下面代码:

    看代码:

    • 在for-in中

      for (index, element) in array[2..<array.count].enumerate() {
        //此处代码省略
      }
      

      此处,元组(index, element)取出来的index并不是从2开始的,而是从0开始的,array[2..<array.count].enumerate()在这里被视为是一个新的数组

    • 其它情况下

      var array1 = [4,2,9,8,5,6]
      var array2 = array1[2...5]
      

      此处的array2并不会像上面for-in里一样被视为一个下标从0到3的新数组,而是产生了一个新的类型ArraySlice(数组片段)它的下标依然是2到5,实际上也就是array1的一个片段而已,它依然可以做+法运算,增删改等操作,但是它已经完全是另外一种东西了,它的任何行为都要遵循ArraySlice的定义,至于ArraSlice到底可以怎么用,可以去查帮助文档,我也就是瞄了一下,反现在暂时也用不到,用到的时候再看也不迟。

    相关文章

      网友评论

          本文标题:数组、字典、集合(Three Primary Collectio

          本文链接:https://www.haomeiwen.com/subject/xtplsttx.html