Swift学习笔记一(Array篇)

news/2024/7/20 23:10:47 标签: swift, 学习, ios

目录

0 绪论

1 数组的创建和初始化

2.数组遍历

2.1通过键值对遍历

2.2 通过forEach遍历

2.3 通过for in遍历

2.3.1 for in 搭配 enumerated

2.3.2 for in的另一种形式

2.3.2 for in 搭配 indices

2.4 通过Iterator遍历器遍历

3 数组的操作

3.1 contains 判断数组包含元素

3.2   allSatisfy(_:) 判断数组的每一个元素都符合给定的条件

4.查找比较

4.1 数组查找

4.1 数组比较大小 min ,max

4.2在参数多个的时候对数组查找

5 数组添加删除操作

5.1append插入元素

5.2 insert 插入元素

5.3 remove移除元素

5.4 移除多个元素(ArraySlice)

5.4.1 通过 Drop 得到 ArraySlice

5.4.2  通过 prefix 得到 ArraySlice

5.4.3  通过 suffix 得到 ArraySlice

5.4.4 通过 Range 得到 ArraySlice

5.5 ArraySlice 转为 Array

5.6 ArraySlice 和原 Array 相互独立

6 数组排序

6.1 随机打乱数组顺序

 6.2  数组倒序

6.3数组的分组

6.4 数组的顺序排序

6.5数组元素交换位置

7 数组的拼接

7.1 字符串数组拼接

7.2元素为 Sequence 数组的拼接

8 总结


0 绪论

   今天来学习一下swifi的数组,废话不说,直接撸代码吧。

1 数组的创建和初始化

let array = [1,2,3,4]
let array = [Int](1...4)
var array: [String] = []
var array = [String]()

let chars = Array("welcome")
print(chars)

let numbers = Array(1...20)
print(numbers)

let chars = Array(repeating: "AI", count: 5)
print(chars)


/**
输出结果如下:

 ["w", "e", "l", "c", "o", "m", "e"]
 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
 ["AI", "AI", "AI", "AI", "AI"]

 */


2.数组遍历


2.1通过键值对遍历

let students = ["zhangsan": 15,"lisi": 16,"wangwu": 17]
let names = Array(students.keys)
let ages = Array(students.values)
print(names)
print(ages)


/**
输出结果如下:
 ["zhangsan", "wangwu", "lisi"]
 [15, 17, 16]
 */

2.2 通过forEach遍历

let numbers = [Int](0...4)
numbers.forEach{ (num) in
    if num == 3{
        //此处不能使用 continue ,break关键字,使用return也只能退出当次循环
        return
    }
    print(num)
}

/**
输出结果如下:
 0
 1
 2
 4
 */


2.3 通过for in遍历

2.3.1 for in 搭配 enumerated

var numbers = [Int](0...5)
for(index,num)in numbers.enumerated(){
      //同时得到索引和值 enumerated()
    print("the index is: \(index),the value is \(num)")
    if num == 3 {
        //此处能使用 break关键字
    }
}

/**
输出结果如下:
 the index is: 1,the value is 1
 the index is: 2,the value is 2
 the index is: 3,the value is 3
 the index is: 4,the value is 4
 the index is: 5,the value is 5
 */


2.3.2 for in的另一种形式

var numbers = [Int](2...6)
for i in 0..<numbers.count{
    print("the index is: \(i),the valuse is: \(numbers[i])")
}


/**
 输出结果如下:
 the index is: 0,the valuse is: 2
 the index is: 1,the valuse is: 3
 the index is: 2,the valuse is: 4
 the index is: 3,the valuse is: 5
 the index is: 4,the valuse is: 6
 */

2.3.2 for in 搭配 indices

  • for in 的另一种形式 (索引 indices)
  • startIndex 返回第一个元素的位置,对于数组来说,永远都是 0。
  • endIndex 返回最后一个元素索引 +1 的位置,对于数组来说,等同于count 。 如果数组为空,startIndex 等于 endIndex 。
var numbers = [Int](2...6)
for i in numbers.indices{
    print("the index is: \(i),the valuse is: \(numbers[i])")
}

/**
 输出结果如下:

 the index is: 0,the valuse is: 2
 the index is: 1,the valuse is: 3
 the index is: 2,the valuse is: 4
 the index is: 3,the valuse is: 5
 the index is: 4,the valuse is: 6
 */


2.4 通过Iterator遍历器遍历

  • 使用 Iterator 遍历数组
let numbers = [Int](0...6)
var numIterator = numbers.makeIterator()
while let num = numIterator.next(){
    print("the value is: \(num)")
}

/**
输出结果如下:
 the value is: 2
 the value is: 3
 the value is: 4
 the value is: 5
 the value is: 6
 */

3 数组的操作


3.1 contains 判断数组包含元素

  • contains(_:) 判断数组是否包含给定元素
  • contains(where:) 判断数组是否包含符合给定条件的元素
let array = [56,42,30,8,63,89,102,6,19,27,34]
print(array.contains(63))
print(array.contains(where: {$0 > 100}))

/**
输出结果如下:
 true
 true
 */


3.2   allSatisfy(_:) 判断数组的每一个元素都符合给定的条件

let array = [Int](0...10)
print(array.allSatisfy({ $0 > 5})) 
print(array.allSatisfy({$0 < 10}))  

/**
输出结果如下:
 false
 false
 */


    

4.查找比较

4.1 数组查找

  • first 返回数组第一个元素(optional),如果数组为空,返回 nil 。
  • last 返回数组最后一个元素(optional),如果数组为空,返回 nil 。
  • first(where:)返回数组第一个符合给定条件的元素(optional)。
  • last(where:) 返回数组最后一个符合给定条件的元素(optional)。

let array = [12,56,48,69,120,3,7,59,25,56,75]
print(array.first)
print(array.last)
print(array.first(where: { $0 > 45}))
print(array.last(where: { $0 > 45}))


/**
输出结果如下:
 Optional(12)
 Optional(75)
 Optional(56)
 Optional(75)
 */
  • firstIndex(of:) 返回给定的元素在数组中出现的第一个位置(optional)
  • lastIndex(of:) 返回给定的元素在数组中出现的最后一个位置(optional)
  • firstIndex(where:) 返回符合条件的第一个元素的位置(optional)
  • lastIndex(where:) 返回符合条件的最后一个元素的位置(optional)
let array = [12,56,48,69,120,3,7,59,25,56,75]
print(array.firstIndex(of: 56))
print(array.lastIndex(of: 56))
print(array.firstIndex(where: { $0 > 45}))
print(array.lastIndex(where: { $0 > 45}))

/**
输出结果如下:

 Optional(1)
 Optional(9)
 Optional(1)
 Optional(10)
 */



4.1 数组比较大小 min ,max

  • min() 返回数组中最小的元素
  • max() 返回数组中最大的元素
  • min(by:) 利用给定的方式比较元素并返回数组中的最小元素
  • max(by:) 利用给定的方式比较元素并返回数组中的最大元素
let array = [12,56,48,69,120,3,7,59,25,56,75]
print(array.min())
print(array.max())

/**
输出结果如下:

 Optional(3)
 Optional(120)
 */
let array = [("zhangsan",26),("lisi",56)]
print(array.min(by: {a,b in a.1 > b.1 }))
print(array.max(by: {a,b in a.1 > b.1}))

/**
输出结果如下:

 Optional(("lisi", 56))
 Optional(("zhangsan", 26))
 */


4.2在参数多个的时候对数组查找

let array = [("zhangsan",26),("lisi",56),("wagnwu",32),("niuli",105)]
print(array.min(by: {(a,b) -> Bool in
    a.1 < b.1
}))

print(array.max(by: {(a,b) -> Bool in
    a.1 < b.1
}))


/**
输出结果如下:

 Optional(("zhangsan", 26))
 Optional(("niuli", 105))
 */


5 数组添加删除操作


5.1append插入元素

  • append(_:) 在末尾添加一个元素
  • append(contentsOf: ) 在末尾添加多个元素
var array = [Int](1...5)
array.append(15)
print(array)
array.append(contentsOf: 8...15)
print(array)


/**
输出结果如下:

 [1, 2, 3, 4, 5, 15]
 [1, 2, 3, 4, 5, 15, 8, 9, 10, 11, 12, 13, 14, 15]
 */

5.2 insert 插入元素

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

/**
输出结果如下:

 [1, 2, 200, 3, 4, 5]
 [-9, -8, -7, -6, -5, -4, -3, -2, -1, 1, 2, 200, 3, 4, 5]
 */

5.3 remove移除元素

  • remove(at:) 移除并返回指定位置的一个元素
  • removeFirst() 移除并返回数组的第一个元素(移除数组前面多个元素)
  • removeLast() 移除并返回数组的最后一个元素(移除数组后面多个元素)
  • popLast() 移除并返回数组的最后一个元素(optional),如果数组为空返回nil 。
  • removeSubrange(_:) 移除数组中给定范围的元素。
  • removeAll() 移除数组所有元素。
  • removeAll(keepingCapacity:) 移除数组所有元素,保留数组容量

var chars: [Character] = ["a","b","c","d","e"]
chars.insert(contentsOf: "nihao", at: 0)
print(chars)
let removeChar = chars.remove(at: 1)
print(removeChar)
print(chars)


/**
输出结果如下:

 ["n", "i", "h", "a", "o", "a", "b", "c", "d", "e"]
 i
 ["n", "h", "a", "o", "a", "b", "c", "d", "e"]
 */
var chars: [Character] = ["a","b","c","d","e"]
chars.insert(contentsOf: "welcome", at: 0)
print(chars)
let removeChar2 = chars.removeFirst()
print(removeChar2)
print(chars)

let removeChar = chars.removeLast()
print(removeChar)
print(chars)

chars.removeSubrange(1...3)
print(chars)

let removeNum = chars.popLast()
print(chars)
print(removeNum)

/**
输出结果如下:

 ["w", "e", "l", "c", "o", "m", "e", "a", "b", "c", "d", "e"]
 w
 ["e", "l", "c", "o", "m", "e", "a", "b", "c", "d", "e"]
 e
 ["e", "l", "c", "o", "m", "e", "a", "b", "c", "d"]
 ["e", "m", "e", "a", "b", "c", "d"]
 ["e", "m", "e", "a", "b", "c"]
 Optional("d")
 */
var chars: [Character] = ["a","b","c","d","e"]
chars.removeAll()
print(chars)
print(chars.capacity)
var chars2: [Character] = ["a","b","c","d","e"]
chars2.removeAll(keepingCapacity: true)
print(chars2)
print(chars2.capacity)


/**
输出结果如下:

 []
 0
 []
 5
 */


5.4 移除多个元素(ArraySlice)


5.4.1 通过 Drop 得到 ArraySlice

  • ArraySlice 是数组或者其他ArraySlice 的一段连续切片,和原数组共享内存。 当要改变 ArraySlice 的时候,ArraySlice 会 copy 出来,形成单独内存。 ArraySlice 拥有和 Array 基本完全类似的方法。
  • dropFirst(:) “移除”原数组前面指定个数的元素得到一个 ArraySlice。
  • dropLast(:) “移除”原数组后面指定个数的元素得到一个 ArraySlice。
  • drop(:) “移除”原数组符合指定条件的元素得到一个 ArraySlice。
let array = [5,2,10,1,0,100,46,99]
print(array)
print(array.dropFirst())
print(array.dropFirst(3))
print(array.dropLast())
print(array.dropLast(3))
print(array.drop{ $0 < 15})

/**
输出结果如下:

 [5, 2, 10, 1, 0, 100, 46, 99]
 [2, 10, 1, 0, 100, 46, 99]
 [1, 0, 100, 46, 99]
 [5, 2, 10, 1, 0, 100, 46]
 [5, 2, 10, 1, 0]
 [100, 46, 99]
 */


5.4.2  通过 prefix 得到 ArraySlice

  • prefix() 获取数组前面指定个数的元素组成的 ArraySlice。
  • prefix(upTo: ) 获取数组到指定位置(不包含指定位置)前面的元素组成的 ArraySlice。
  • prefix(through: ) 获取数组到指定位置(包含指定位置)前面的元素组成的 ArraySlice。
  • prefix(while: ) 获取数组前面符合条件的元素(到第一个不符合条件的元素截止)组成的 ArraySlice。

let array = [5,2,10,1,0,100,46,99]
print(array.prefix(4))
print(array.prefix(upTo: 4))
print(array.prefix(through: 4))
print(array.prefix{ $0 < 10})

/**
输出结果如下:

 [5, 2, 10, 1]
 [5, 2, 10, 1]
 [5, 2, 10, 1, 0]
 [5, 2]
 */


5.4.3  通过 suffix 得到 ArraySlice

  • suffix() 获取数组后面指定个数的元素组成的 ArraySlice。
  • suffix(from: ) 获取数组从指定位置到结尾(包含指定位置)的元素组成的 ArraySlice。
let array = [5,2,10,1,0,100,46,99]
print(array.suffix(3))
print(array.suffix(from: 5))

/**
输出结果如下:

 [100, 46, 99]
 [100, 46, 99]
 */

5.4.4 通过 Range 得到 ArraySlice

  • 可以通过对数组下标指定 Range 获取 ArraySlice,可以使用闭区间、半开半闭区间、单侧区 间、甚至可以只使用 ... 来获取整个数组组成的 ArraySlice 。

let array = [5,2,10,1,0,100,46,99]
print(array[3...5])
print(array[3..<5])
print(array[...2])
print(array[..<2])
print(array[6...])
print(array[...])

/**
输出结果如下:

 [1, 0, 100]
 [1, 0]
 [5, 2, 10]
 [5, 2]
 [46, 99]
 [5, 2, 10, 1, 0, 100, 46, 99]
 */

5.5 ArraySlice 转为 Array

  • ArraySlice 无法直接赋值给一个 Array 的常量或变量,需要使用 Array(slice) 。
let array = [5,2,10,1,0,100,46,99]
let slice = array[3...5]
var arrayNew = Array(slice)

5.6 ArraySlice 和原 Array 相互独立

  • ArraySlice 和原 Array 是相互独立的,它们添加删除元素不会影响对方


6 数组排序


6.1 随机打乱数组顺序

  • shuffle() 在原数组上将数组元素打乱,只能作用在数组变量上。
  • shuffled() 返回原数组的随机化数组,可以作用在数组变量和常量上。
var array = [Int](0...20)
var arrayShu = array.shuffled()
print(array)
print(arrayShu)

/**
输出结果如下:

 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
 [17, 13, 2, 0, 1, 12, 15, 5, 10, 3, 11, 6, 18, 8, 16, 7, 19, 4, 14, 9, 20]
 */

 6.2  数组倒序

  • reverse() 在原数组上将数组逆序,只能作用在数组变量上。
  • reversed() 返回原数组的逆序“集合表示”,可以作用在数组变量和常量上,该方法不 会分配新内存空间。
var array = [Int](0...20)
print(array)
array.reverse()
print(array)

/**
输出结果如下:

 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
 [20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
 */

6.3数组的分组

  • partition(by belongsInSecondPartition: (Element) throws -> Bool) 将数组以某个 条件分组,数组前半部分都是不符合条件的元素,数组后半部分都是符合条件的元素。
var array = [Int](0...20)
var arrayShu = array.shuffled()
print(array)
let index = arrayShu.partition { (element) -> Bool
    in
    element > 10
}
print(arrayShu)

let partition1 = arrayShu[..<index]
let partition2 = arrayShu[index...]
print(partition1)
print(partition2)

/**
输出结果如下:

 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
 [7, 9, 3, 10, 5, 1, 0, 8, 2, 4, 6, 13, 12, 17, 16, 20, 18, 15, 19, 14, 11]
 [7, 9, 3, 10, 5, 1, 0, 8, 2, 4, 6]
 [13, 12, 17, 16, 20, 18, 15, 19, 14, 11]
 */

6.4 数组的顺序排序

  • sort() 在原数组上将元素排序,只能作用于数组变量。

  • sorted() 返回原数组的排序结果数组,可以作用在数组变量和常量上。
var array = [Int](0...20)
var arrayShu = array.shuffled()
print(array)
print(arrayShu)
print(arrayShu.sorted())

/**
输出结果如下:

 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
 [3, 19, 12, 13, 1, 10, 20, 16, 18, 9, 11, 17, 5, 0, 14, 8, 2, 6, 7, 4, 15]
 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
 */



6.5数组元素交换位置

  • swapAt(_:_:) 交换指定位置的两个元素。
var array = [Int](0...20)
print(array)
array.swapAt(array.startIndex, array.endIndex - 1)
print(array)

/**
输出结果如下:

 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
 [20, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 0]
 */

7 数组的拼接


7.1 字符串数组拼接

  • joined() 拼接字符串数组里的所有元素为一个字符串。
  • joined(separator:) 以给定的分隔符拼接字符串数组里的所有元素为一个字符串。
var array = ["welcome","shenzhen"]
print(array.joined())
print(array.joined(separator: ","))

/**
输出结果如下:

 welcomeshenzhen
 welcome,shenzhen
 */

7.2元素为 Sequence 数组的拼接

  • joined() 拼接数组里的所有元素为一个更大的 Sequence。
  • joined(separator:) 以给定的分隔符拼接数组里的所有元素为一个更大的 Sequence。
let ranges = [0...3,8...15,18...26]
for range in ranges{
    print(range)
}

/**

输出结果如下:

 0...3
 8...15
 18...26
 */

let array = [[1...3,5...6],[8...9,19...23],[10...15,28...30,35...40]]
let joined = array.joined(separator: [-1...0])
print(Array(joined))

/**
输出结果如下:

 [ClosedRange(1...3), ClosedRange(5...6), ClosedRange(-1...0), ClosedRange(8...9), ClosedRange(19...23), ClosedRange(-1...0), ClosedRange(10...15), ClosedRange(28...30), ClosedRange(35...40)]
 */

for i in ranges.joined(){
    print(i)
}

/**
输出结果如下:

 0
 1
 2
 3
 8
 9
 10
 11
 12
 13
 14
 15
 18
 19
 20
 21
 22
 23
 24
 25
 26
 */

8 总结

暂时还没没写总结。


http://www.niftyadmin.cn/n/5020871.html

相关文章

机器学习中岭回归、LASSO回归和弹性网络与损失函数

今天咱们来聊点纯技术的东西&#xff0c;这东西是基础&#xff0c;不说往后没法说&#xff0c;在机器学习领域中&#xff0c;我们可以通过正则化来防止过拟合&#xff0c;什么是正则化呢&#xff1f;常见的就是岭回归、LASSO回归和弹性网络。 先说说什么叫做过拟合&#xff1f…

《基于Python的机器学习实战:分类算法的应用与实现》

基于Python的机器学习实战&#xff1a;分类算法的应用与实现 在当今的数据时代&#xff0c;机器学习已经成为处理和分析海量数据的重要工具。其中&#xff0c;分类算法作为机器学习的重要组成部分&#xff0c;被广泛应用于各类场景。本文将介绍基于Python的分类算法实现&#…

电子元器件选型与实战应用—04 LDO选型、特性及应用

文章目录 1. 参数详解1.1 输出电流1.2 输入电压1.3 输出电压1.4 功耗1.5 PSRR1.6 精度1.7 耗散功率1.8 热阻2. 特性详解2.1 OVP2.2 UVLO2.3 压差2.4 线性瞬态响应2.5 动态负载调整2.6 效率2.7 软启动2.8 输出自放电3. 工作原理4. 和DC-DC区别5. 使能脚设计6. layout7. 二极管和…

Pytorch02 神经网路搭建步骤

文章目录 import numpy as np import torch from PIL.Image import Image from torch.autograd import Variable# 获取数据 def get_data():train_Xnp.asarray([3.3,4.4,5.5,6.71,6.93,4.168,9.779,6.182,7.59,2.167,7.042,10.791,5.313,7.997,5.654,9.27,3.1])train_Ynp.asarr…

春秋云镜 CVE-2015-9331

春秋云镜 CVE-2015-9331 wordpress插件 WordPress WP All Import plugin v3.2.3 任意文件上传 靶标介绍 wordpress插件 WordPress WP All Import plugin v3.2.3 存在任意文件上传&#xff0c;可以上传shell。 启动场景 漏洞利用 exp #/usr/local/bin/python3 # -*-coding:…

Dokcer创建MySQL容器,并在宿主机或mysql可视化工具中连接mysql容器的数据库

文章目录 一、Docker 创建 MySQL容器1. 拉取 MySQL 镜像2. 创建并运行 MySQL 容器3. 创建并运行 MySQL 容器&#xff08;目录映射&#xff09; 二、连接 MySQL 数据库1. 在 MySQL 容器内&#xff0c;连接MySQL2. 在宿主机连接 MySQL&#xff08;遇到问题及解决方案&#xff09;…

go 邮件功能(全)

邮件模板 pkg/email/email.go type SenderOptions struct {UserName stringPassWord stringHost stringPort stringMailFrom string }type Sender struct {options SenderOptionse *gomail.Message }func NewSender(opt SenderOptions) *Sender {e : gomail.Ne…

【数据结构】堆的向上调整和向下调整以及相关方法

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3; 文章目录 一、堆的概念二、堆的性质…