网络知识 娱乐 Swift 中数组的创建和操作

Swift 中数组的创建和操作

一、数组的创建

  • 字面量创建数组
    1、创建空数组的时候必须携带类型信息
//let array = []   //如果直接这样创建一个空数组,程序会报错

//需要携带类型信息
let array: [String] = []
let array2: [Int] = []

2、如果内容已经提供了类型信息,比如说作为函数的实际参数或者已经分类了的变量或常
量,你可以通过空数组字面量来创建一个空数组

var array = [1, 2, 3, 4, 5]
print(array)
//将 array 赋值为空数组,此时程序不会报错,显示的还是之前 Int 类型的数组
array = []
print(array)
  • 初始化器创建数组
    两种方式:
    1、[类型] ()
    2、Array()
let array = [String]()
let array2 = Array<String>()
  • 初始化器参数
let number = [Int](0...7)
print(number)

let persons = ["zhangsan": 14, "lisi": 20, "wangwu": 54]
let names = [String](persons.keys)
let ages = [Int](persons.values)
print("names is (names), ages is (ages)")

二、数组的操作

  • 遍历和索引
    1、数组遍历
  • for-in
let persons = ["zhangsan": 14, "lisi": 20, "wangwu": 54]
let names = [String](persons.keys)
let ages = [Int](persons.values)
print("names is (names), ages is (ages)")
for name in names {
    print(name)
}
  • forEach 方法
    • 无法使用 break 或 continue 跳出或者跳过循环
    • 使用 return 只能退出当前一次循环的执行体
let numbers = [Int](0...7)
numbers.forEach { (num) in
    if num == 3 {
        continue   //此时报错,显示 break 或者 continue 只能使用在循环中
    }
    print(num * 10)
}
  • 同时得到索引和值 enumerated()
let numbers = [Int](0...7)
for (index, num) in numbers.enumerated() {
    print("index is (index), number is (numbers)")
}
  • 使用 Iterator 遍历数组
let numbers = [Int](0...7)
var numInterator = numbers.makeIterator()
while let num = numInterator.next() {  //如果 numInterator.next() 有值,就将他的值赋给 num 变量
    print(num)
}

2、数组的索引

  • startIndex 返回第一个元素的位置,对于数组来说,永远都是 0

  • endIndex 返回最后一个元素索引 +1 的位置,对于数组来说,等同于count

  • 如果数组为空,startIndex 等于 endIndex

    • indices 获取数组的索引区间
let numbers = [Int](0...7)
for i in numbers.indices {
    print(i)
}
  • 查找操作

1、判断是否包含指定元素

  • contains(_: ) 判断数组是否包含给定元素
  • contains(where:) 判断数组是否包含符合给定条件的元素
let numbers = [Int](2...7)
print(numbers.contains(4))  // true
print(numbers.contains(where: {$0 < 1}))  // false

2、判断所有元素符合某个条件

  • allSatisfy(_: ) 判断数组的每一个元素都符合给定的条件
var array = [10, 20, 45, 30, 98, 101, 30 ,4]
print(array.allSatisfy({$0 > 10}))   // false
print(array.allSatisfy({$0 >= 4}))   // true

3、查找元素

  • first 返回数组第一个元素(optional),如果数组为空,返回 nil
  • last 返回数组最后一个元素(optional),如果数组为空,返回 nil
  • first(where:) 返回数组第一个符合给定条件的元素(optional)
  • last(where:) 返回数组最后一个符合给定条件的元素(optional)
var array = [10, 20, 45, 30, 98, 101, 30 ,4]
print(array.first)
print(array.last)
print(array.first(where: { (num) -> Bool in
    num > 30
}))
print(array.last(where: { $0 > 100 }))

4、查找索引

  • firstIndex(of:) 返回给定的元素在数组中出现的第一个位置(optional)
  • lastIndex(of:) 返回给定的元素在数组中出现的最后一个位置(optional)
var array = [10, 20, 45, 30, 98, 101, 30 ,4]
print(array.firstIndex(of: 30) ?? 0)   //输出结果: Optional(3)
print(array.lastIndex(of: 30) ?? 0)    //输出结果: Optional(6)
print(array.lastIndex(of: 20) ?? 0)  //输出结果: Optional(1)

5、查找最大最小元素

  • min() 返回数组中最小的元素
  • max() 返回数组中最大的元素
  • min(by:) 利用给定的方式比较元素并返回数组中的最小元素
  • max(by:) 利用给定的方式比较元素并返回数组中的最大元素
var array = [10, 20, 45, 30, 98, 101, 30 ,4]
print(array.min() ?? 0)   //输出结果: Optional(4)
print(array.max() ?? 0)   //输出结果: Optional(101)
var array = [(45, "error1"), (20, "error2"), (60, "error3")]
print(array.min(by: { (a, b) -> Bool in
    a.0 < b.0
}) ?? 0)
print(array.max(by: { (a, b) -> Bool in
    a.1 < b.1
}))
  • 添加和删除

添加元素
1、在末尾添加

  • append(_: ) 在末尾添加一个元素
  • append(contentsOf: ) 在末尾添加多个元素
var numbers = [Int](2...7)
numbers.append(100)
print(numbers)
numbers.append(contentsOf: 101...105)
print(numbers)

2、在任意位置插入

  • insert(_:at:) 在指定的位置插入一个元素
  • insert(contentsOf: at:) 在指定位置插入多个元素
var numbers = [Int](2...7)
numbers.insert(1, at: 0)
print(numbers)
numbers.insert(contentsOf: -2...0, at: 0)
print(numbers)

3、字符串也是 Collection ,Element 是 Character 类型

var chars: [Character] = ["a", "b", "c"]
chars.insert(contentsOf: "hello", at: 0)
print(chars)   //输出结果: ["h", "e", "l", "l", "o", "a", "b", "c"]

删除元素
1、移除单个元素

  • remove(at:) 移除并返回指定位置的一个元素
  • removeFirst() 移除并返回数组的第一个元素
  • removeLast() 移除并返回数组的最后一个元素
  • popLast() 移除并返回数组的最后一个元素(optional),如果数组为空返回nil
var chars: [Character] = ["a", "b", "c", "d"]
chars.remove(at: 1)  //返回的是移除的那个元素
print(chars)
chars.removeFirst()
print(chars)
var chars: [Character] = ["a", "b", "c", "d"]
chars.removeLast()
print(chars)
let removedChar = chars.popLast()
print(removedChar)   // 输出: Optional("d")
print(chars)         //输出: ["a", "b"]

2、移除多个元素

  • removeFirst(: ) 移除数组前面多个元素
  • removeLast(: ) 移除数组后面多个元素
  • removeSubrange(_: ) 移除数组中给定范围的元素
  • removeAll() 移除数组所有元素
  • removeAll(keepingCapacity:) 移除数组所有元素,保留数组容量
var chars: [Character] = ["a", "b", "c", "d"]
chars.removeFirst(2)
print(chars)
chars.removeLast(1)
print(chars)
var chars: [Character] = ["a", "b", "c", "d"]
chars.removeSubrange(1...2)
print(chars)
var chars: [Character] = ["a", "b", "c", "d"]
//chars.removeAll()
chars.removeAll(keepingCapacity: true)  //输出的容量是 4
print(chars)  //输出: []
print(chars.capacity)  //输出: 0,容量是 0
  • ArraySlice(数组切片)
  • 重排操作
  • 拼接操作