swift-集合类型01-数组的基本操作

来源:互联网 发布:数据库模型图是什么 编辑:程序博客网 时间:2024/06/05 04:29

import UIKit


class ViewController: UIViewController {

  

  override func viewDidLoad() {

    super.viewDidLoad()

    

    /**

     数组是一系列相同类型的数据集合,存储相同类型的可重复的有序的多个数据。

     

     Swift 数组存储特定类型的值。不同于Objective - C NSArray NSMutableArray类:

     它们可以存储任何类型的对象,而且不提供对象的本质任何信息。

     

     Swift中,数组存储的数据值的类型必须是明确的,通过显式类型注释,或通过类型推断来保证,

     而且没必要非是 class类型。

     例如:如果创建一个 Int类型的数组,就不能向其中加入不是Int类型的任何数据。

     Swift 数组是类型安全的,我们必须清楚数组中存储的类型

     

     Swift 数组语法形式:Array<SomeType>,或者简写为 SomeType[]

     其中 SomeType表示数组存储的数据类型。

     两种形式在功能上是一样的,但是推荐使用 SomeType[]种写法,在本文中都会使用这种形式来

     */

    let a :Array<Int> = [1,2,3,1]

    print(a)

    

    var shopList :Array<String> = ["eggs","milk","potato"]

    print(shopList)

    

    /*

    shopList 数组被声明为变量(var关键字)而不是常量(let关键字)

    所以 shopList可能会被加入其他数据

    由于 Swift的类型推断机制,我们不必把数组的类型定义的很清楚。

    所以 shoplist的构造也可以这样写

    var shopList = ["Eggs", "Milk"]

    因为所有值都是相同的类型(String),Swift可以推断出 shoplist String类型数组

    */

    let people : Array<String> = ["male","female"]

    print(people)

    

    //可以使用数组的只读属性 count来获取数组中的元素的数量

    print("people count ==\(people.count)")

    

    //使用 isEmpty属性(返回Bool值)检查 count 属性的值是否为 0

    if people.isEmpty {

      

      print("people is nil")

      

    } else {

      

      print("people is not nil")

      

    }

    

    //使用 append方法在数组尾部增加新的元素:

    shopList.append("apple")

    print(shopList)

    

    //直接使用下标语法来获取数组中的元素

    //第一个元素在数组中的索引值是 0而不是 1  

    //Swift 中的数组索引总是从零开始,与OC一样

    let first = shopList[0]

    let last = shopList.last

    print("first is\(first) and last is\(last)")

    

    

    /**

    通过下标改变一系列数据值,即使新数据的数量和原有数据的数量是不一样的

    不能使用下标语法在数组尾部添加新元素。

    如果我们试着用这种方法对越界的索引数据进行访问或者设置新值,会引发一个运行时错误。

    可以通过对索引值和数组的 count进行比较来检查某个索引是否有效。

    除了当 count = 0时(说明这是个空数组),最大的索引值一直是 count - 1

    */

    

    //MARK: [1...3]= ["bananas","pich"] 

    //  意思是从数组的第二个元素和第四个元素之间有 ["bananas","pich"]来代替

    //第二个数组不能超过数组的个数否则会报错

    shopList [1...3] = ["bananas","pich"]

    print(shopList)

    //["eggs", "bananas", "pich"]

    

    //使用数组的 insert (atIndex:)方法在 atIndex 之前添加元素:

    shopList.insert("chicken", atIndex:0)

    print(shopList)

    

    //使用 removeAtIndex方法来移除数组中的某一项。

    //这个方法把数组在索引位置存储的元素移除,并返回这个被移除的元素

    //元素移除后数组中的空出项会被自动填补,所以现在索引值为2的元素的值是pich

    let shopList2 = shopList.removeAtIndex(2)

    print(shopList2)

    

    print(shopList)

    

    /**

    如果只想把数组中的最后一项移除,使用 removeLast方法而不是 removeAtIndex方法来避免获取数组的count属性。

    removeLast 也会返回被移除的数据项

    */

    

    

    //使用 for-in循环遍历数组中所有元素

    for string in shopList {

      

      print(string)

      

    }

    //如果同时需要每个元素的值和索引值,可以使用属性 enumerate来进行数组遍历。

    //enumerate 返回一个由元素索引值和数据值组成的键值对。

    //我们可以把这个键值对分解成临时常量或者变量来进行遍历

    

    for (index,value) in shopList.enumerate() {

      

      print("string\(index +  1) == \(value)")

      

    }

    

    //使用构造器创建一个特定数据类型的空数组

    //someInts 被设置为变量类型是 Int 的数组

    

    let array2 = [String]()

    print("array2 ==\(array2)")

    

    

    let someInt:Array<Int> = []

    print("someInt has\(someInt.count) items")

    

    var array1 = [1,2,3]

    //这个还可以清空数组

    array1 = []

    print("array1 has\(array1.count) items")

    

    //数组还提供了创建特定大小并且元素被同时初始化的构造器。

    //把数组的元素数量 count和初始值 repeatedValue传入数组即可

    let three1 = Array(count:3, repeatedValue: 1.1)

    print(three1)

    

    let three2 = Array(count:3, repeatedValue: 2.1)

    print(three2)

    

    /// 使用加法操作符 +来合并两种相同类型的数组

    let six1 = three1 + three2

    print(six1)

  }

}


0 0