Swift算法语法使用

字符串操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// --------- 字符串转数组  
let strs = "a bc de"
let arr:[Substring] = strs.split(separator: " ")
let list:[String] = strs.components(separatedBy: " ")

//--------- 数组转字符串
let valuesArr = ["1","2","3"]
let valueStr = valuesArr.joined(separator: ",")

//--------- 获取字符串中某个字符Character
let index:String.Index = strs.index(strs.startIndex, offsetBy:2)
let char:Character = strs[index]
print(strs[index])

//--------- 字符串替换
let dateStr = "2020-10-01"
let subStr = dateStr.replacingOccurrences(of: "-", with: "")

//--------- 字符串大小写转化
let str = "JDJKs"
let upperStr = str.uppercased() //转化大写
let lowerStr = str.lowercased() //转化小写

//--------- 有效数字
var f = 123.32342342
var s = String(format: "%.2f", f) //123.32

//--------- 字符串转Int Double Float
var str1 = "818"
var val1 = Int(str1) // 转Int
var val2 = Double(str1) // 转Double
var val3 = Float(str1) // 转float
var val4 = "25.0"; // 如果是25.0 转 Int,
let count = Double(val4); // 先转Double
let val4_int = Int(count);// 再将其转为Int

//--------- 数字转为字符串
var num1 = 25;
var str2 = "\(num1)"
var str3 = String(num1) // 如果是Int 类型的话 直接进行转
var str4 = String(stringInterpolationSegment: num1) // 如果是Double

//--------- 数字相互转换
var num2 = 25.0
var num3 = Int(num2) // Double 转为 Int

遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//--------- 普通遍历
// 0...3 0..<3 names[0...3] names[2...]
let names = ["Anna", "Alex", "Brian", "Jack"]
for i in 0...3 {
print(names[i])
}

//--------- 倒序
// 闭区间[10,0] through
// 开区间[10,0] to
for s in stride(from: 10, to: 0, by: -1) {
print(s)
}

//--------- 遍历字符串
let strs = "dddddddd"
for s in strs {
//s的类型Character
print(s)
}

数组操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
//---------  for in迭代
var x = [1, 2, 3]
for i in x.dropFirst() { //迭代除了第一个元素外的部分
print("i", i)
}

for (num, element) in x.enumerated() { //同时遍历下标和元素
print("num: element:", num, element)
}

//--------- map形变
let resultArr = x.map{$0 + 2} //对数组中元素进行形变,每个元素+2
let resultArr4 = x.map{fib in fib*fib} //对数组中的元素进行形变,每个元素的平方

//--------- flatMap形变
let array1 = [[1,2,3],[4,5,6]]
var arr = array1.map{ $0.map{ $0 + 1 } } //输出:[[2,3,4],[5,6,7]]
var arr2 = array1.flatMap{ $0.map{ $0 + 1 } } //输出:[2,3,4,5,6,7] 将二维数组转化一维

let arr3: [String?] = ["AA","BB",nil,"CC"]
var arr4 = arr3.flatMap{ $0 } //输出:["AA", "BB", "CC"] 过滤掉空

//--------- filter筛选
let nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let result_arr1 = nums.filter{$0 % 2 == 0} //筛选数组中的元素为偶数的元素,返回一个新数组
let result_arr2 = nums.filter{num in num % 2 == 0} //同上

//---------- sorted排序
let students: Set = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
let sortedStudents = students.sorted() //默认元素序列按【升序】排序。
let descendingStudents = students.sorted(by: >) //这样为倒序

//---------- Reduce获取一个值
//数组中所有元素的和
let numbers = [1,2,3,4,5]
let sum = numbers.reduce(0) { $0 + $1 } //0代表初始值 $0代表已经遍历的操作结果 $1代表新的元素
let sum1 = numbers.reduce(0) { total, num in
return total + num
}
print(sum) // 15

//合并成的新值不一定跟原数组中元素的类型相同
let tel = numbers.reduce("") { "\($0)" + "\($1)" }
print(tel)