Swift基础——数组Array

Swift基础——数组Array

数组:使用有序列表存储同一类型的多个值,相同值可出现在一个数组的不同位置。

数组简介

首先,和String一样我们也来看看他的一些Api方法
常规操作方法
常规方法
reverse、reversed:数组反转
反转
reverse()在原数组操作,reversed()返回新的数组不会操作破坏原数组
swapAt:指定索引位置交换
交换

记住startIndex这些索引是从“1”开始数的哦
数组添加合并
添加合并
数组元素替换
替换
数组增删
增删
当然删除等这些运用加以其他操作就会变得很神奇,我们尝试使用闭包语句来感受一下:
闭包演示
排序我们都知道默认升序,我们可以使用闭包使其降序排序:
闭包排序
到这里,尾部加ed大概应该能看出来是什么意思了吧,既然氛围铺垫到这里了,那就再演示一个排序例子吧:
字符串长度排序
下面看看这些简单一维数组用到的代码示例吧

//import UIKit

import Foundation
import Darwin

//定义数组
var arrString = Array<String>()
var arrFloat = Array<Float>()
var arrFloat2 = [Float]()
var arrString2 = [String]()
//定义数组并赋值
var arrInt = [0 , 1 , 2 , 3 , 4 ]
//查看数组中元素数量
arrInt.count
//判空
arrInt.isEmpty
//是否包含指定元素
arrInt.contains(3)
//分别获取数组首个和末尾元素
arrInt.first
arrInt.last
//分别获取数组中最大和最小元素
arrInt.max();
arrInt.min();
//数组反转
arrInt.reverse()
arrInt.reversed()

//交换指定索引位置的元素
arrInt.swapAt(0, 1)
arrInt.swapAt(arrInt.startIndex , arrInt.endIndex - 1)
//打乱数组顺序让数组内所有元素随机排列
arrInt.shuffled()
arrInt.shuffle()
//数组可以直接进行元素合并
arrInt += [5]
//数组添加元素末尾添加
arrInt.append(6)
//把数组索引换成另一些元素
arrInt[2...4] = [7]
arrInt
arrInt[0] = 1

arrInt
//插入:在数组索引1位置插入10
arrInt.insert(10, at: 1)
//删除:删除第一个元素索引0位置,并返回删除后数组
arrInt.dropFirst()
//删除最后一个元素并返回被删除后的元素
arrInt.popLast()
arrInt
//删除指定位置元素
arrInt.remove(at: 1)
//删除素质里的所有元素
arrInt.removeAll()


var strArr = ["张鑫乐" , "张三" , "张员外" , "嫦娥" , "乐宝"]
//使用闭包删除所有“张”开头的元素
strArr.removeAll{$0.hasPrefix("张")}
strArr

arrInt = [1 , 9 , 2 , 8 , 3 , 7 , 4 , 6 , 5]
arrInt.sort()
arrInt
//闭包实现降序排序并返回排序后数组
let arrInt1 = arrInt.sorted(by: {$0 > $1})
arrInt
arrInt1


//我们设定字符串数组以字符串长度进行排序
var str = ["1" , "22" , "333" , "4444" , "55555"]
str
str.sort(by: {left , right in
    return left.count > right.count
})
str

二维数组创建及数组遍历

二维数组创建
创建二维
嗯。。。。发现了吧本质就是一维数组里面还有一个一维数组
数组遍历
数组遍历
完了吗?当然没有,再看看其他几种遍历方式吧:
数组遍历2
看出来Swift的包容性了吧,继续看看其他的吧:
遍历索引和值
索引和值字符串插入
forEach遍历
forEach
数组遍历基本就结束了,我们来关心一些其他的小问题,嗯。。。比如如何比较两个数组差异:
difference:获得差异
差异

来瞅瞅这里用到的这些代码示例吧:

//import UIKit

import Foundation

//定义二维数组:直接赋值两个一维数组
var arr1 = [1 , 2 , 3]
var arr2 = [1 , 2 , 3]
var arr = [arr1 , arr2]


//定义二维数组并指定为整数类型
var arrInt = Array<Array<Int>>()
//把那俩一维数组添加进来
arrInt.append(arr1)
arrInt.append(arr2)
arrInt
//数组遍历,循环
for row in arrInt{
    for column in row{
        //print(column)
    }
}


//当然还有按索引遍历
for i in 0..<arr1.count{
    print(arr1[i])
}
//当然Swift嘛很随意的,我们可以省略这个索引
for item in arr1{
    print(item)
}
//你以为这是Swift的极限?开玩笑,他甚至引入了sql语句的条件判断
var strArr = ["张鑫乐" , "张三" , "李四" , "张大仙"]
for item in strArr where item.hasPrefix("张"){
    print(item)
}

//遍历数组索引和值
for (index , value) in strArr.enumerated(){
    print("\(index) : \(value)")
}
//forEach遍历
strArr.forEach{item in
    print(item)
}
//比较数组差异
var strArrCopy = ["张鑫乐" , "张三" , "李四" , "张大脚"]
let dif = strArr.difference(from: strArrCopy)
print(dif)

数组常用操作

字符串与数组的转换

split:把字符串转换为数组
字符串转数组
joined:数组合并成字符串
合并数组
zip:可以将两个序列中的元素一一对应的方式重新组合成一个序列
zip演示
可是如果元素个数对应不上怎么办?直接看结果:
zip2
zip3

数组过滤

filter、allSatisfy、where、partition等
数组过滤

partition:定位排序,类似于快排中的定位数字
定位排序

min、max:获取序列中的最小值、最大值
最大最小值
氛围到这了都,感受一下字典吧,后续会详细介绍
字典
prefix:数组截取
截取
drop:顾名思义丢弃
drop使用

数组降维

诺,顾名思义啦,就是把多位数组通过一些方法转换为维度更低的数组
flatMap:获取每个数组元素并放在一个一维数组里
数组降维
最后看看这个部分用到的代码示例吧:

//import UIKit

import Foundation

let str1 = "I have 8 girls"
//以“ ”分割转换为数组闭包转换
let arr1 = str1.split{$0 == " "}
arr1
//当然我们也可以不使用闭包,类似Java那样就可
let arr2 = str1.split(separator: " ")
arr2
//当然用闭包的话还有比Java更牛掰的后续会介绍闭包
let arr3 = str1.split{$0.isNumber};
arr3

//以某字符合并数组
let str2 = arr2.joined(separator: " ")

//介绍一个zip函数
arr1
let arr4 = [1 , 2 , 3 , 4 , 5]
let zip1 = zip(arr4, arr1)
for (num , words) in zip1{
    print("\(num) : \(words)")
}

//filter
var arr5 = ["张鑫乐","张晓泽","陈小理","白一晓","张三丰","佐佐木"]
let arr6 = arr5.filter{$0.hasPrefix("张")}
arr6
//allSatisfy:全部满足
var arr7 = [1 , 2 , 3 , 4]
var arr8 = [1 , 2 , 6 , 7]
let isBig = arr7.allSatisfy({$0 < 5})
let isSmall = arr8.allSatisfy({$0 < 5})
isBig
isSmall
//where:条件处理类似sql,当然这个加以循环会有更多操作,此处我们只演示first与last
//从前往后第一个>2的元素
let num1 = arr7.first(where: {$0 > 2})
num1
//从后往前第一个<6的元素
let num2 = arr8.last(where: {$0 < 6})
num2
//从前往后第一个2的元素索引下标
let index1 = arr7.firstIndex(of: 2)
index1
//从后往前第一个2的元素索引下标
let index2 = arr7.lastIndex(of: 3)
index2
//当然这个同样也可以引入where就不展示了


var arr9 = [1 , 2 , 3 , 8 , 9 , 7 , 6 , 5 , 4]
let sort = arr9.partition {$0 > 5}
arr9

//最大值最小值
var arr10 = [1 , 2 , 3 , -8 , -9 , 7 , 6 , 5 , 4]
let minNum = arr10.min();
let maxNum = arr10.max();
//当然还有abs求绝对值
let absNum = arr10.max {abs($0) < abs($1)}
absNum

let arr11 = ["张鑫乐" : 520 , "张三丰" : 250 , "张天爱" : 110]
let maxArr = arr11.max {$0.value < $1.value}
maxArr



arr10
//返回小于5的序列
let num3 = arr10.prefix{$0 < 5}
num3
//返回索引下标前的元素组成序列,不包含当前及左闭右开
arr10
let num4 = arr10.prefix(upTo: 5)
//返回n个元素组成的子序列
let num5 = arr10.prefix(4)
//返回从数组开始到指定位置的子序列右也闭
let num6 = arr10.prefix(through: 5)


arr10
//遍历如果小于n跳过,当遇到>=7时返回其以及其后的元素作为数组
let num7 = arr10.drop{$0 < 7}
num7
//丢弃前n个返回剩余元素组成的数组
let num8 = arr10.dropFirst(3)

arr7 = [1 , 2 , 3 , 4]
arr8 = [5 , 6 , 7 , 8]
var arr12 = [arr7 , arr8]
//flatMap:获取每个数组元素并放在一个一维数组里
var arr13 = arr12.flatMap{$0}
arr13
//当然这个有空值nil时也会体现出来
var arr14 = [5 , 6 , nil , nil]
var arr15 = [arr7 , arr14]
arr15
//compactMap:去空
var arr16 = arr15.flatMap {$0}.compactMap {$0}
arr16


私货彩蛋:我从不后悔对任何人好,哪怕是我看错的人,哪怕我被辜负。因为,我对你好,不是因为你有多好,只是因为我很好 —— 慧海大师

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一哑7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值