Swift学习笔记之数组

数组

我们都知道在OC中数组的定义非常简单,数组里也可以随意装同类型的非空对象,而在Swift中新增了一个数组元素类型的概念,故而定义Swift数组差异就非常明显,不过别担心,增删改查这些基本操作,还是差不多的。

初始化

var anyArr:[Any] = []
var intArr:[Int] = []
var strArr = [String]()
let anyArr2 = [1,"@"] as Any
var strArr2 = [String](repeating: "@", count: 3)

是不是完全没有OC的影子?神奇的是居然还有元素类型为Any这种数组,这就直接打破局限任意发挥了。解释一下最后一行,定义的是初始有3个“@”的字符串数组。

增删查改

aAnyArr.append("a")//增
aAnyArr.insert("b", at: 0)//插
print(aAnyArr[0])//查
for item in aAnyArr {//便利
    print(item)
}
for (index,item) in aAnyArr.enumerated() {
    print("\(index)=\(item)")
}
aAnyArr.remove(at: 0)//删
aAnyArr.dropLast(1)//drop是去掉,去掉后面的几个元素
aAnyArr.removeAll()
//保留空间的删
aAnyArr.removeAll(keepingCapacity: true)
var aAnyArr2:[Any] = [1,"a","b"]
aAnyArr2.replaceSubrange(0...1, with: repeatElement(2, count: 2))//改
print(aAnyArr2)
var aAnyArr3 = aAnyArr2.suffix(2)//从后面截断
print(aAnyArr3)
var aAnyArr4 = aAnyArr2.suffix(from: 1)//从某处截断

这些是一些基本操作,在不熟练的时候需要多查找资料,而且苹果未来可能还会一直添加更多的便利操作。

数组的其他操作

var intArray = [1,3,4,8,2]
var intArray2 = [1,3,4,8,2,6,6,6]
print(intArray+intArray2)//合并
print(intArray.isEmpty)//判空
print(intArray.contains(3))//包含
print(intArray.min()!)//最小值
print(intArray.max()!)//最大值
print(intArray.sorted())//升序
print(intArray.sorted(by: >))//降序
//是否完全相等
print(intArray.elementsEqual(intArray.sorted()))
//是否以某数组为开始
print(intArray2.starts(with: intArray))
var intArray3 = [6,1,3,4,8,2,6,6,6]
print(intArray3.starts(with: intArray))

+号就可以合并,不过需要元素类型相同,升降序有更多的使用方法,此处列举的最简单的,等值判断其实也很常用。再加上starts的补充,基本涵盖了我们日常使用。倒数第一二个打印为flase,true。

扩展

Swift的数组有一个比较有意思的操作,那就是map和flatMap用法:

map

var intArray = [1,2,3,4]
var intToHashArr = intArray.map{$0.hashValue}
print(intToHashArr)
var caseArr = intArray.map{"case: \($0)"}
print(caseArr)

上面代码第一个打印1234的哈希值,第二个打印“case:1,case2,case3,case4”,这里涉及到闭包的概念,其实可以理解为将数组元素进行一系列操作之后生成一个新的数组。

flatMap

var arrArr = [[1,2],[3,4],[5,6]]
var caseArr = arrArr.map{"case: \($0)"}
print(caseArr)
var caseArr2 = arrArr.flatMap({"case: \($0)"})
print(caseArr2)

我们可以猜的出来第一个打印是:["case: [1, 2]", "case: [3, 4]", "case: [5, 6]"]
但是第二个的结果令我大吃一惊:["c", "a", "s", "e", ":", " ", "[", "1", ",", " ", "2", "]", "c", "a", "s", "e", ":", " ", "[", "3", ",", " ", "4", "]", "c", "a", "s", "e", ":", " ", "[", "5", ",", " ", "6", "]"]
这是什么操作,仿佛经历了“降维打击”!
其实真没错!flatMap就是对数组进行降维,不论数组有多少层,统统还原为一维数组,想想还挺科幻的,而且它会把我们上一篇的可选类型强制解析,并且自动过滤nil值,总结来说,数组的map包括“compactMap”等都是对所有元素执行闭包,这样理解就简单多了!

OK,以上就是全部内容,纯手打,纯原创。

你可能感兴趣的:(Swift学习笔记之数组)