Skip to content

Array 数组

介绍

数组中只能声明一种数据类型,可以通过索引访问

声明

swift
var a = [1,2,3]
var b: Array<Int> = [1, 3, 4]
var c: [Int] = [1, 2, 3]
var d = Array([1, 2, 3])
var e = Array(1...10)

重复内容

swift
var a = Array(repeating: "*", count: 10)

数量

swift
var a = [1, 2, 3, 4]

print(a.count) // 4

是否为空

isEmpty 方法判断是否为空

swift
var a = [1, 2, 3, 4]

print(a.isEmpty) // false

下标访问

swift
var a = [1, 2, 3, 4, 5]

print(a[1]) // 获取第一个
print(a[1...3]) // 获取第 1 道 3 个元素

print(a[...3]) // 从 0 开始访问到 3
print(a[1...]) // 从 1 开始访问到最后

遍历

遍历数组

swift
var a = [1, 2, 3, 4, 5]

for item in a {
  print(item)
}

遍历下标和值,数组需要调用 enumerated 方法

swift
var a = [1, 2, 3, 4, 5]

for (index,value) in a.enumerated() {
  print(index,value)
}

第一个和最后一个元素

firstlast 可以获取数组中第一个和最后一个元素

swift
var a = [1, 2, 3, 4, 5]

print(a.first ?? "")
print(a.last ?? "")

随机元素

randomElement 方法可以获取到数组中随机一项

swift
var a = [1, 2, 3, 4, 5]

print(a.randomElement() ?? "")

追加元素

append 方法可以向数组结尾追加元素,contentsOf 参数可以追加多个

使用 let 声明的数组是不能添加元素的

swift
var a = [1, 2, 3, 4, 5]

a.append(6) // 添加一个

a.append(contentsOf: [7, 8, 9]) // 添加一个

a += [10, 11] // 添加一个或者多个

插入元素

insert 方法插入元素,at 参数代表插入的索引,contentsOf 参数可以插入多个元素

swift
var arr = ["1", "2", "3", "4", "5"]

// 插入元素, at 参数是第几位
arr.insert("哈哈哈", at: 2)

// contentsOf 参数可插入多个
arr.insert(contentsOf: ["a","b"], at: 3)

print(arr)

var arr2 = [1, 2, 3]

// 插入序列
arr2.insert(contentsOf: 6...9, at: 0)

print(arr2)

替换元素

replaceSubrange 方法可以替换指定索引或者区间的元素

swift
var arr = ["1", "2", "3", "4", "5"]

// 将指定范围替换
arr.replaceSubrange(0...1, with: ["哈哈哈", "222", "时间当回事"])

print(arr)

追加

指定一个区间,使用 + 可以在前面追加元素

swift
var a = [4, 5]

var b = (1...3) + a

var c = a + (7...10)

var d = a + b

print(b)
print(c)
print(d)

删除元素

下面提供多个删除方法

swift
var a = [1, 2, 3, 4, 5, 6]

a.remove(at: 2) // 删除指定索引的
a.removeLast() // 删除最后一位
a.removeFirst() // 删除第一位
a.removeSubrange(1...2) // 删除指定范围
a.removeAll() // 全部删除

print(a)

查找元素

判断数组中是否包含某个元素,使用 contains 方法

swift
var a = ["苹果", "橙子", "樱桃", "香蕉", "橘子"]

var isHave = a.contains("苹果")

print(isHave) // true

查找指定条件的元素,使用 first 方法,传入一个条件,只会找到第一个满足条件的元素,$0 代表每次循环的元素,该方法类似于 js 的 find() 方法

同理,firstIndex 可以查找到第一个满足条件元素的索引,类似于 js 的 findIndex() 方法

还有 lastlastIndex 方法,用于查找最后一个满足条件的元素或索引

swift
var a = ["苹果", "橙子", "樱桃", "香蕉", "橘子"]
var b = [1, 2, 3, 4, 5]

var is1 = a.first(where: {$0 == "香蕉"})
var is2 = b.first(where: {$0 > 3})
// 不使用 $0 的写法
var is3 = b.firstIndex(where: {n in n > 3})

print(is1 ?? "")
print(is2 ?? "")
print(is3 ?? "")

maxmin 方法可以找到数组中的最大值和最小值

swift
var a = [1, 2, 3, 4, 5]

print(a.max() ?? "")
print(a.min() ?? "")

数组变换

map 方法可以将数组进行转换,类型 js 的 map 方法

swift
var a = ["ZhangSan", "LiSi", "WangWu"]

var a2 = a.map{
    $0.uppercased()
}

print(a2) // ["ZHANGSAN", "LISI", "WANGWU"]

或者

swift
var a = ["ZhangSan", "LiSi", "WangWu"]

var a2 = a.map{item in
    item.uppercased()
}

print(a2)

数组遍历

for in 方法

swift
var a = ["ZhangSan", "LiSi", "WangWu"]

for item in a {
    print(item)
}

获取索引,数组需要调用 enumerated() 方法

swift
var a = ["ZhangSan", "LiSi", "WangWu"]

for (index, item) in a.enumerated() {
    print(index, item)
}

forEach 方法

swift
var a = ["ZhangSan", "LiSi", "WangWu"]

a.forEach{
    print($0)
}

a.forEach{item in
    print(item)
}

filter 方法,产生新的数组,过滤指定条件的数据

swift
var a = [1,2,3,4]

var res = a.filter{
    $0 > 2
}

print(res) // [3, 4]

数组排序

sort 方法可以排序数组

swift
var a = [99, 1, 2, 3, 4, 5]

a.sort()

print(a) // [1, 2, 3, 4, 5, 99]

by 参数可控制排序方式,生序或者降序

swift
var a = [99, 1, 2, 3, 4, 5]
var b = [99, 1, 2, 3, 4, 5]

a.sort(by: >)
b.sort(by: <)

print(a) // [99, 5, 4, 3, 2, 1]
print(b) // [1, 2, 3, 4, 5, 99]

洗牌模式

shuffle 方法可以随机打乱数组,洗牌模式

swift
var a = [99, 1, 2, 3, 4, 5]

a.shuffle()

print(a)

将数组转换为字符串

joined 方法可以将数组转换为字符串,separator 参数将定义转换的分隔规则

swift
var a = ["苹果", "香蕉", "橘子"]

print(a.joined()) // 苹果香蕉橘子


var b = ["苹果", "香蕉", "橘子"]

print(b.joined(separator: "-")) // 苹果-香蕉-橘子