003_swift之字符串、数组、字典

字符串String

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

数组Array

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)

字典Dictionary

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// 声明
var dict1 = Dictionary<String, Int>()
var dict2 = [String: Int]()
var dict3: Dictionary<String, Int> = [:]
let dict = ["zhangsan": 18, "lisi": 19]

// count 和 isEmpty
// 可以使用 count 只读属性来找出 Dictionary 拥有多少元素
// 使用布尔量 isEmpty 属性检查字典是否为空
print(dict.count)
print(dict.isEmpty)

//遍历字典
let dict = ["zhangsan": 18, "lisi": 19, "wangwu": 20]
for (key, value) in dict {
print("name \(key), age \(value)")
}
for key in dict.keys.sorted() {
print("name \(key), age \(dict[key])")
}

// 添加或更新元素
var dict = ["zhangsan": 18, "lisi": 19, "wangwu": 20]
dict["zhaoliu"] = 21
dict["zhangsan"] = 281

// update
var personDict = [Person(name: "zhangsan", age: 18): 3000, Person(name: "lisi", age: 25): 3000]
personDict.updateValue(5000, forKey: Person(name: "zhangsan", age: 23)) //key 并未改变
print(personDict)

// 移除元素
var dict = ["zhangsan": 18, "lisi": 19, "wangwu": 20]
dict["wangwu"] = nil
dict.removeValue(forKey: "zhangsan")

// 合并两个字典
var diction = ["a": 18, "b": 19, "c": 20]
diction.merging(["a": 3, "d": 4]) { (current, _) -> Int in
current
}
print(diction)
diction.merging(["b": 5, "f": 20]) { (_,newData) -> Int in
newData
}
print(diction) //merging不会改变原来字典的值
var dict = ["a": 18, "b": 19, "c": 20]
dict.merge(["a": 3, "d": 4], uniquingKeysWith: { (current, _) in current})
print(dict)
dict.merge(["b": 5, "f": 20], uniquingKeysWith: { (_, newData) in newData})
print(dict)

// firstIndex
var dict = ["a": 18, "b": 19, "c": 20]
let index = dict.firstIndex { (_, value) -> Bool in
value == 18
}
if let i = index {
print(dict[i])
print("key:\(dict[i].key) key:\(dict[i].value)")
}
let kvs: KeyValuePairs = ["a": 18, "b": 19, "c": 20]
print(kvs)

json字符串和数组互转

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

// json字符串数组
func getArrayFromJSONString(jsonString:String) ->NSArray{
let jsonData:Data = jsonString.data(using: .utf8)!
let array = try? JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers)
if array != nil {
return array as! NSArray
}
return array as! NSArray
}

////数组转json
func getJSONStringFromArray(array:NSArray) -> String {
if (!JSONSerialization.isValidJSONObject(array)) {
print("无法解析出JSONString")
return ""
}
let data : NSData! = try? JSONSerialization.data(withJSONObject: array, options: []) as NSData!
let JSONString = NSString(data:data as Data,encoding: String.Encoding.utf8.rawValue)
return JSONString! as String
}

json字符串和字典互转

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
 // MARK: 字典转字符串
extension Dictionary {
func toJsonString() -> String? {
guard let data = try? JSONSerialization.data(withJSONObject: self,options: []) else {
return nil
}
guard let str = String(data: data, encoding: .utf8) else {
return nil
}
return str
}
}
// MARK: 字符串转字典
extension String {
func toDictionary() -> [String : Any] {
var result = [String : Any]()
guard !self.isEmpty else { return result }
guard let dataSelf = self.data(using: .utf8) else {
return result
}
if let dic = try? JSONSerialization.jsonObject(with: dataSelf,
options: .mutableContainers) as? [String : Any] {
result = dic
}
return result
}
}