您的位置:首页 > 移动开发 > Swift

Swift数组

2016-07-09 15:31 302 查看

一、声明和创建数组

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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  swift