Swift数组

一、声明和创建数组

swift的声明数组变量有两种语法。

  • 使用泛型语法。数组类型的语法格式为:Array<类型>,此处的尖括号就是泛型语法。

  • 使用简化语法。数组类型的语法格式为:[类型]。
    例如,如下代码可用于声明数组变量。
    //使用泛型语法声明数组
    var myArr : Array<String>
    //使用简化语法声明数组
    var names : [String]
    var nums : [Int]

仅仅声明数组变量还不能使用数组,程序还必须创建数组结构体,并将数组赋值给数组变量才能使用它们。创建数组也有两种方式。

  • 使用Array的构造器创建数组
    Array的构造体提供了如下3个常用的构造器。
    • init():创建一个空数组。
    • init(arrayLieral:):以指定的多个元素来创建数组。
    • init(count:,repeatedValue:):创建一个包含count个repeatedValue元素的数组。
      下面程序为上面定义的3个数组变量创建了对应的数组。
      myArr = Array<String>()
      //创建一个包含10个“fkit”元素的数组,并将该数组赋值给names变量。
      names = [String](count: 10, repeatedValue: "fkit")
      //以指定的多个元素创建数组,并将数组赋值为nums变量
      nums = [Int](arrayLiteral:12, 20, 30, -9, -29)
  • 使用简化语法创建数组
    数组的简化语法更加简洁,直接使用方括号列出多个数组值即可。
    如下代码使用简化语法创建了数组。
    var flowers : [String] = ["a","b","c","d"]
    var values = ["1","2","3","e"]

二、使用数组

数组提供了一个只读的count属性,通过这个属性可以方位到数组的长度,一旦获得了数组的长度,就可以通过循环来遍历该数组的每个数组元素。
下面代码师范了输出flowers数组的每个数组元素的值。
for var i = 0; i < flowers.count; i++{
print(flowers[i])
}

除此之外,数组还提供了只读的startIndex和endIndex属性,其中startIndex返回该数组的第一个元素的索引,因此该属性总是返回0;endIndex返回该数组最后一个元素的索引+1,因此该属性的返回值与count属性的返回值相等。例如如下代码:

//访问flowers数组的第一个索引
print(flowers.startIndex)
//访问flowers数组的最后一个索引(实际上返回最后一个元素的索引+1)
print(flowers.endIndex)

三、使用for-in遍历数组

for-in循环遍历数组的语法格式如下:

for element in array{
//element自动迭代访问每个元素
}

在上面语法中,element无须使用let声明,for-in循环将会隐式声明该常量。下面程序示范了如何使用for-in循环来遍历数组元素。

var books:[String] = ["疯狂iOS讲义","疯狂Swift讲义","疯狂Android讲义"]
for book in books{
print(book)
}

当使用for-in循环遍历、访问数组元素时,不允许对循环常量进行赋值,这是因为for-in循环隐式使用let来声明该变量,因为程序不能对循环常量赋值。

四、数组的可变性和数组的修改

  • 添加元素
    Array提供了append(_:)方法添加元素,每调用该方法一次,程序就会在数组的最后添加一个元素,数组的长度也会自动加1.
    如下代码调用Array的append(_:)方法添加元素。

    //使用var定义一个可变数组
    var languages = ["Swift"]
    //追加一个元素
    Languages.append("GO")
    languages.append("Lua")
    //输出Swift,GO,Lua
    print(languages)
    print(languages.count)

    除了调用append方法添加元素之外,Swift的数组还支持使用“+”执行加法,数组的加法可以添加另一个类型匹配的数组。例如如下代码

    languages = languages + ["Ruby"]
    //上面代码可简写如下
    languages += ["Ruby"]
    print(languages)
    print(languages.count)

  • 插入元素
    Array提供了insert(_:Element,atIndex:Int)方法插入元素。需要注意的是,该方法的第二个参数不能超过数组长度。(可以等于数组长度,此时效果与调用append方法完全相同)。
    如下代码调用Array的insert()方法插入元素。

    //使用var定义一个可变数组
    var languages = ["Swift"]
    //插入一个元素
    languages.insert["Go",atIndex:0]
    //插入一个元素,指定atIndex:2,表明该元素插入数组的最后
    languages:insert["Ruby",atIndex:2]
    print(languages)
    print(languages.count)

  • 数组和范围
    Array支持在方括号中使用Range,这样既可以一次性地获取多个数组元素,也可一次性对多个数组元素进行赋值。
    例如以下代码:

    var languages = ["Swift","OC","PHP","Perl","Ruby","Go"]
    //获取languages数组中索引为1-4的元素
    let subRange = languages[1..<4]
    print(subRange)//输出[OC,PHP,Perl]
    //将languages数组中索引为2-4的元素替换成"C/C++","Python"
    languages[2...4] = ["C/C++","Python"]
    print(languages)
    //将languages数组中索引为1-2的元素替换成"a","b","c"
    //两个元素换成三个元素
    languages[1...2] = ["a", "b", "c"]
    print(languages)

    正如上面代码所看到的,当程序对指定范围的数组元素赋值时,并不需要指定范围包含的元素个数与所赋值的元素个数相同,如果所赋值的元素少于范围内包含的元素个数,程序会自动减少Swift数组的长度;如果所赋值的元素多于范围内包含的元素个数,程序会自动增加Swift数组的长度。
    正因为Swift的数组存在这种功能,因此程序可以用过这种方式添加或删除数组元素。例如,如下代码即可清空数组:

    languages[0..<languages.count] = []

    除此之外,数组还提供了replaceRange(_:With:)方法,该方法可以将数组的中间一段替换为指定的子数组。例如如下程序:

    var characters = ["孙悟空","猪八戒","唐僧","牛魔王"]
    characters.replaceRange(1...3,with:["黄袍怪"])
    print(characters)//输出["孙悟空","黄袍怪"]
  • 删除元素
    Array提供了如下方法来删除元素。
    • popLast()->Element:删除数组的最后一个元素,该方法返回即将删除的元素。
    • removeAtIndex(index:Int)->Element:删除指定索引处的元素,该方法返回即将删除的元素。
    • removeLast()->Element:删除数组的最后一个元素,该方法返回即将删除的元素。该方法和popLast方法的作用大致相同。
    • removeAll(keepCapacity:Bool = false):清空数组。其中keepCapacity参数指定是否保留数组底层的数据缓冲,该参数默认false,即不保留数据缓冲。
      如下程序调用了上面方法来删除数组元素。

      var languages = ["Swift","OC","PHP","Perl","Ruby","Go"]
      //删除索引为2的元素,即PHP
      languages.removeAtIndex(2)
      //再次删除索引为2的元素,即Perl
      languages:removeAtIndex(2)
      //删除最后一个元素
      languages.removeLast()
      //删除所有元素
      languages.removeAll()
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值