在开发中,数组这个概念我们应该很熟悉了,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 方法
Array 的 reverse 方法可以将数组中的元素倒序排列:
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
更多好文,扫码关注微信公众号:
来源:https://www.cnblogs.com/theswiftworld/p/4237881.html