1 Filter 筛选集合中符合闭包条件的 item
struct Room {
var location: String
var price: Float
var space: CGSize
}
let rooms = [Room(location: "丰台", price: 30000, space:CGSize(width: 100, height: 100)),
Room(location: "海淀", price: 80000, space:CGSize(width: 100, height: 100)),
Room(location: "望京", price: 40000, space:CGSize(width: 100, height: 100)),
Room(location: "东城", price: 50000, space:CGSize(width: 100, height: 100))]
//1 Filter 筛选集合中符合闭包条件的 item
let myRoom = rooms.filter { (room) -> Bool in
room.price > 50000
}
for (index, room) in myRoom.enumerated() {
print("\(index) \(room.location)")
} // 0 海淀
2 Map 遍历集合
//2.1 Map 遍历集合中的 item,转变为另外的对象
let rooms2 = rooms.map { (room) -> String in
return (room.location) + String(room.price)
}
print(rooms2)//["丰台30000.0", "海淀80000.0", "望京40000.0", "东城50000.0"]
//2.2 对可选值的 map, 包含拆箱和装箱两个操作,先取出集合中不为nil的值,然后包装为可选类型
let value: Int? = 2
let value_map = value.map { (value) -> String in
print(value)//2
return "\(value)"
}
print(value_map)//Optional("2")
let value1: Int? = nil
let value1_map = value1.map { (value) -> String in //代码段不执行
print(value)
return "\(value)"
}
print(value1_map)// nil
3 flatMap 将数组展开
//3.1 对一位数组进行非nil筛选
let arr2 = [1,2,3,nil,4]
let arr2_flatMap = arr2.flatMap{$0}
print(arr2_flatMap)//[1, 2, 3, 4]
//3.2 对二维数组展开为一位数组
let arr3 = [[1,2,3,nil,4], ["a", "b", "c"]]
let arr3_flatMap = arr3.flatMap{$0}
print(arr3_flatMap)//[Optional(1), Optional(2), Optional(3), nil, Optional(4), Optional("a"), Optional("b"), Optional("c")]
//3.3 二维数组的组合
let fruit = ["apple", "banana"]
let price = [10,20,30]
let res = fruit.flatMap { (f) in
price.map({ (p) in
return "\(f): \(p)"
})
}
print(res)//["apple: 10", "apple: 20", "apple: 30", "banana: 10", "banana: 20", "banana: 30"]
4 compactMap 将数组展开,用来替代 flatMap
//4.1compactMap 筛选不为 nil 元素
let urls:[String?] = [nil]
let urls_res = urls.compactMap{$0}
print(urls_res)//[]
//4.2
let urls_2 = [[1,2,3,nil,4], ["a", "b", "c"]]
let urls_res_2 = urls_2.compactMap{$0}
print(urls_res_2)//二维数组展开为一维数组 [[Optional(1), Optional(2), Optional(3), nil, Optional(4)], [Optional("a"), Optional("b"), Optional("c")]]
//4.3 两个数组的匹配
let fruit2 = ["apple", "banana"]
let price2 = [10,20,30]
let res2 = fruit2.compactMap { (f) in
price2.map({ (p) in
return "\(f): \(p)"
})
}
print(res2)//[["apple: 10", "apple: 20", "apple: 30"], ["banana: 10", "banana: 20", "banana: 30"]]
5 reduce 将数组各元素合并
//5 reduce 对数组各元素的合并
let stu = ["Alic", "Lili", "Json", nil, "John"]
let stu_reduce = stu.reduce("") { (res, item) -> String in
item == nil ? res : (res + " " + item!)
}
print(stu_reduce)// Alic Lili Json John
网友评论