当前位置: 首页 > news >正文

Swift学习笔记一(Array篇)

目录

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) inif num == 3{//此处不能使用 continue ,break关键字,使用return也只能退出当次循环return}print(num)
}/**
输出结果如下:0124*/


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 1the index is: 2,the value is 2the index is: 3,the value is 3the index is: 4,the value is 4the 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: 2the index is: 1,the valuse is: 3the index is: 2,the valuse is: 4the index is: 3,the valuse is: 5the 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: 2the index is: 1,the valuse is: 3the index is: 2,the valuse is: 4the index is: 3,the valuse is: 5the 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: 2the value is: 3the value is: 4the value is: 5the 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}))/**
输出结果如下:truetrue*/


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

let array = [Int](0...10)
print(array.allSatisfy({ $0 > 5})) 
print(array.allSatisfy({$0 < 10}))  /**
输出结果如下:falsefalse*/


    

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 ina.1 < b.1
}))print(array.max(by: {(a,b) -> Bool ina.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) -> Boolinelement > 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: ","))/**
输出结果如下:welcomeshenzhenwelcome,shenzhen*/

7.2元素为 Sequence 数组的拼接

  • joined() 拼接数组里的所有元素为一个更大的 Sequence。
  • joined(separator:) 以给定的分隔符拼接数组里的所有元素为一个更大的 Sequence。
let ranges = [0...3,8...15,18...26]
for range in ranges{print(range)
}/**输出结果如下:0...38...1518...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)
}/**
输出结果如下:012389101112131415181920212223242526*/

8 总结

暂时还没没写总结。

相关文章:

Swift学习笔记一(Array篇)

目录 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 判断数组包含…...

C++项目实战——基于多设计模式下的同步异步日志系统-②-前置知识补充-不定参函数

文章目录 专栏导读不定参函数C风格不定参函数不定参宏函数 专栏导读 &#x1f338;作者简介&#xff1a;花想云 &#xff0c;在读本科生一枚&#xff0c;C/C领域新星创作者&#xff0c;新星计划导师&#xff0c;阿里云专家博主&#xff0c;CSDN内容合伙人…致力于 C/C、Linux 学…...

C++使用Boost库加入UDP组播时程序崩溃

程序崩溃情况 本程序运行在Oracle VM VirtualBox虚拟的Ubuntu20.04上 terminate called after throwing an instance of ‘boost::wrapexceptboost::system::system_error’ what(): set_option: No such device 已放弃 (核心已转储) ** C使用Boost库加入组播的代码 #inclu…...

华为HCIA(四)

链路聚合可以负载分担&#xff0c;增加带宽&#xff0c;提高可靠性 Eth-trunk的传输速率和成员端口数量喝带宽有关 路由器分割广播域&#xff0c;交换机分割冲突域 指定端口&#xff1a;DP;根端口&#xff1a;RP;阻塞端口&#xff1a;AP 如果目的MAC不在交换机MAC中&…...

Qt --- Day01

效果图&#xff1a; 头像的圆形未实现 单击登陆&#xff0c;触发信号与槽 enter_widget.h #ifndef ENTER_H #define ENTER_H#include <QDialog> #include<QLabel> #include<QTimer> class enter_widget : public QDialog {Q_OBJECT public:explicit enter_…...

24.98万起,新一代AITO问界M7值得买吗?

监制 | 何玺 排版 | 叶媛 问界汽车新品来袭。 9月12日下午&#xff0c;问界汽车为全新的M7系列车型举行了发布会。华为常务董事余承东&#xff0c;在全网一片“遥遥领先”呼声的烘托下&#xff0c;上台发表演讲&#xff0c;详细介绍了M7的全面升级和各大亮点。 01 新一代AI…...

Java毕业设计 SSM SpringBoot 水果蔬菜商城

Java毕业设计 SSM SpringBoot 水果蔬菜商城 SSM 水果蔬菜商城 功能介绍 首页 图片轮播 关键字搜索商品 分类菜单 折扣大促销商品 热门商品 商品详情 商品评价 收藏 加入购物车 公告 留言 登录 注册 我的购物车 结算 个人中心 我的订单 商品收藏 修改密码 后台管理 登录 商品…...

前端JS中的异步编程与Promise

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 一、JavaScript的异步编步机制 二、事件循环&#xff08;Event Loop&#xff09;和任务队列&#xff08;Task Queue…...

Pytorch Advanced(二) Variational Auto-Encoder

自编码说白了就是一个特征提取器&#xff0c;也可以看作是一个降维器。下面找了一张很丑的图来说明自编码的过程。 自编码分为压缩和解码两个过程。从图中可以看出来&#xff0c;压缩过程就是将一组数据特征进行提取&#xff0c; 得到更深层次的特征。解码的过程就是利用之前的…...

Flask 使用 JWT(三)flask-jwt-extended

如果想要在 flask 中使用 JWT ,推荐使用 flask-jwt-extended 插件。 使用 pip 安装这个扩展插件的最简单方法是: pip install flask-jwt-extended基本使用 在接下来的案例中,我们看一下基本使用。我们可以使用 create_access_token() 函数用来生成实际的 JWT token。@jwt_r…...

堆与栈的区别

OVERVIEW 栈与堆的区别一、程序内存分区中的堆与栈1.栈2.堆3.堆&栈 二、数据结构中的堆与栈1.栈2.堆 三、堆的深入1.堆插入2.堆删除&#xff1a;3.堆建立&#xff1a;4.堆排序&#xff1a;5.堆实现优先队列&#xff1a;6.堆与栈的相关练习 栈与堆的区别 自整理&#xff0c;…...

OpenWrt kernel install分析(2)

一. 前言 接下来分析make -C image compile install TARGET_BUILD。 二. Makefile分析 1. 命令首先运行target/linux/mediatek/image/Makefile,该文件内容如下&#xff1a; target/linux/mediatek/image/Makefile: include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/image.…...

【计算机网络】传输层协议——TCP(下)

文章目录 1. 三次握手三次握手的本质是建立链接&#xff0c;什么是链接&#xff1f;整体过程三次握手过程中报文丢失问题为什么2次握手不可以&#xff1f;为什么要三次握手&#xff1f; 2. 四次挥手整体过程为什么要等待2MSL 3. 流量控制4. 滑动窗口共识滑动窗口的一般情况理解…...

Vue前端页面打印

前端依赖10-插件"print-js": “^1.6.0” 一&#xff1a;简介 print-js 是一个 Vue.js 插件&#xff0c;用于在 Vue.js 项目中实现打印功能。它依赖于 print-js 库&#xff0c;所以需要安装这个库。 能实现以下功能&#xff1a; PDF打印&#xff08;默认&#xff…...

Visual Studio将C#项目编译成EXE可执行程序

经常看文章时会收获不少实用工具&#xff0c;有的在github上是编译好的&#xff0c;有的则是未编译的项目文件。所以经常会使用Visual Studio编译项目文件成exe可执行程序&#xff0c;以下为编译的流程。 第一步&#xff0c;从github上下载项目文件&#xff0c;举个例子&#…...

git把某一次commit修改过的文件打包导出(git)

1、使用命令把修改的文件打包导出:打包某次commit: git diff-tree -r --no-commit-id --name-only f4710c4a32975904b00609f3145c709f31392140 | xargs tar -rf xxx_1.1.tar 2、使用命令把某次节点后的文件导出: window 下: git diff f4710c4a32975904b00609f3145c709f31392…...

Vue3 Ajax(axios)异步

文章目录 Vue3 Ajax(axios)异步1. 基础1.1 安装Ajax1.2 使用方法1.3 浏览器支持情况 2. GET方法2.1 参数传递2.2 实例 3. POST方法4. 执行多个并发请求5. axios API5.1 传递配置创建请求5.2 请求方法的别名5.3 并发5.4 创建实例5.5 实例方法5.6 请求配置项5.7 响应结构5.8 配置…...

idea2023全量方法debug

为什么要全量debug 刚上手项目或者研读开源项目源码的时候&#xff0c;我们对项目的结构&#xff0c;尤其是功能链路非常陌生&#xff0c;想要debug根本不知道断点打在哪&#xff0c;光靠文件名类名或者方法名去猜也不是个事。这时候只要配置一下全量debug模式&#xff0c;就能…...

Docker镜像解析获取Dockerfile文件

01、概述 当涉及到容器镜像的安全时&#xff0c;特别是在出现镜像投毒引发的安全事件时&#xff0c;追溯镜像的来源和解析Dockerfile文件是应急事件处理的关键步骤。在这篇博客中&#xff0c;我们将探讨如何从镜像解析获取Dockerfile文件&#xff0c;这对容器安全至关重要。 02…...

使用maven命令打jar包

参考&#xff1a;https://blog.csdn.net/qq_27525611/article/details/123487255 https://blog.csdn.net/qq_35860138/article/details/82701919 小伙伴给我的项目自己尝试命令行打包遇到的坑&#xff0c;简单记录下 // 打包&#xff08;1.8环境下打的&#xff0c;17会报错&…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...