Swift 数组

来源:互联网 发布:死神人物能力数据 编辑:程序博客网 时间:2024/05/14 19:06

Swift数组使用有序列表存储同一类型的多个值。相同的值可以多次出现在一个数组的不同位置中。
Swift数组会强制检测元素的类型,如果类型不同则会则会报错,Swift数组应该遵循像Array < Element >这样的形式,气宗Element是这个数组中唯一允许存在的数据类型。

如果创建一个数组,并赋值给一个变量,则创建的集合就是可以修改的。这意味着在创建数组后,可以通过添加、删除、修改的方式改变数组里的项目。如果将一个数组赋值给常量,数组就不可更改,并且数组的大小和内容都不可以修改。

注意: 数组初始化时定义了元素类型后,在后续使用中,元素类型必须是统一的。但如果定义了类型为『Any』,或『AnyObject』时,则数组中可以使用任意类型的元素,同时『Any』类型时,还可以包含方法selector类。

一、创建数组

  • 1、使用构造语法来创建一个由特定数据类型构成的空数组:
var someArray = [SomeType]()
  • 2、创建一个初始化大小数组的语法
var someArray = [SomeType](repeating: InitialValue, count: NumbeOfElements)
  • 3、数组的初始化
let arrayTmp01 = Array<String>()  let arrayTmp02 = [String]()  let arrayTmp03:Array<String> = []  let arrayTmp04:[String] = []  
  • 3、例子
let someInts01 = [Int](repeating: 0, count: 3)print(someInts01)let someInts02:[Int] = [10, 20, 30]print(someInts02)

输出:

[0, 0, 0][10, 20, 30]

二、数组操作

1、访问数组

可以根据数组的索引来访问数组的元素,语法如下:

var someVar = someArray[index]

index 索引从 0 开始,即索引 0 对应第一个元素,索引 1 对应第二个元素,以此类推。

let array01:[Int] = [1,2,3,4,5]// 第一个元素let item01 = array01.firstprint(item01)// 最后一个元素let item02 = array01.lastprint(item02)// 获取下标未0的元素let value01 = array01[0]print(value01)//查找元素为1的下标let value02 = array01.index(of: 1)print(value02)

输出

Optional(1)Optional(5)1Optional(0)

2、数组遍历

let array = ["1", "2", "3", "4"]for value in array {    print("value = \(value)")}for i in 0..<array.count {    print(array[i])}for (index, value) in array.enumerated() {    print("index = \(index), value = \(value)")}

输出:

value = 1value = 2value = 3value = 41234index = 0, value = 1index = 1, value = 2index = 2, value = 3index = 3, value = 4

3、添加元素

var array = [1, 2, 3]// 添加单个元素array.append(4)print(array)//添加元素数组array = array05 + [5, 6, 7] //print(array)//添加元素集合array.append(contentsOf: [8,9])print(array)array.append(contentsOf: 10...15) // 元素序列print(array)// 添加元素(添加到指定位置)array.insert(0, at: 0)print(array)

输出:

[1, 2, 3, 4][1, 2, 3, 4, 5, 6, 7][1, 2, 3, 4, 5, 6, 7, 8, 9][1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15][0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

4、删除元素

var array = [1, 2, 3, 4, 5, 6, 7, 8, 9]// 删除首个元素array.removeFirst()print(array)// 删除尾部元素array.removeLast()print(array)// 删除指定下标元素array.remove(at: 0)print(array)// 保持数组容量array.removeAll(keepingCapacity: true)print(array.capacity)// 删除所有元素array.removeAll()print(array)

输出:

[2, 3, 4, 5, 6, 7, 8, 9][2, 3, 4, 5, 6, 7, 8][3, 4, 5, 6, 7, 8]9[]

5、修改元素

var array = [0, 2, 3]array[0] = 1print(array)

输出:

[1, 2, 3]

6、数组元素个数

let array = [1, 2, 3]// 数组元素个数let count = array.countprint(count)

输出:

3

7、isEmpty 属性

let array01 = [1, 2, 3]// 判断数组是否为空let isValid01 = array01.isEmptyprint(isValid01)let array02 = [Int]()let isValid02 = array02.isEmptyprint(isValid02)

输出:

falsetrue

8、数组是否包含某个元素

let array = [1, 2, 3]// 是否包含某个元素let contant: Bool = array.contains(1)print("array \(contant) 包含 1")

输出:

array true 包含 1

9、数组转字符串

let array = ["1", "2", "3", "4", "5", "6", "7"]let stringMark: String = "_";let string = array.joined(separator: stringMark)print("数组转字符串:\(string)")let arrayString = string.components(separatedBy: stringMark)print("字符串转数组:\(arrayString)")

输出:

数组转字符串:1_2_3_4_5_6_7字符串转数组:["1", "2", "3", "4", "5", "6", "7"]

10、数组排序

let array = [1, 2, 3, 5, 7, 9, 0, 4, 6, 8]// 数组排序(注意:$0, $1(从0开始,表示第i个参数...))let arraySort01 = array.sorted { (n1, n2) -> Bool in    //从小到大    //return n1 > n2    //从大到小    return n1 < n2}print(arraySort01)let arraySort02 = array.sorted(by: {    // 从小到大    // return $0 > $1    // 从大到小    return $0 < $1})print(arraySort02)let arraySort03 = array.sorted(){    // 从小到大    // $0 > $1    // 从大到小    $0 < $1}print(arraySort03)

输出:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9][0, 1, 2, 3, 4, 5, 6, 7, 8, 9][0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

11、数组的批量操作

// 数组批量操作var arrayBatch01 = [1,2,3,4,5]print("1 批量修改:\(arrayBatch01)")arrayBatch01[1...2] = [8,8]print("2 批量修改:\(arrayBatch01)")arrayBatch01.replaceSubrange(Range(uncheckedBounds: (3, 4)), with: [10, 10])print("3 批量修改:\(arrayBatch01)")

输出:

1 批量修改:[1, 2, 3, 4, 5]2 批量修改:[1, 8, 8, 4, 5]3 批量修改:[1, 8, 8, 10, 10, 5]