list1 = ["你好","2","3","4"]
let list2:[String] = ["你好","2","3","4"]
let list3:[Any] = ["你好","2","3",3,UILabel()]
let list4:NSArray = ["你好","2","3","4",UILabel()]
let list5:NSMutableArray = ["1","2","3","4"]
list2.removeAll() // 如果定义为var
list2 = [] // 如果定义为var
list5.removeAllObjects() // var 和let 都可以
list5 = [] // 如果定义为var
shoppingList[4...6] = ["Bananas", "Apples"] // 将数组4...6 的范围用指定的数组取代
shoppingList.insert("Maple Syrup", at: 0)
let mapleSyrup = shoppingList.remove(at: 0)
let apples = shoppingList.removeLast()
for item in shoppingList {
print(item)
}
for (index, value) in shoppingList.enumerated() {
print("Item \\(index + 1): \\(value)")
}
看一下它的定义
func map<T>(_ transform: (Element) throws -> T) rethrows -> [T]
解释: T 为泛型 transform: 闭包函数 我们需要给它传入一个有参数有返回值的闭包函数 [T] 函数会返回给我们一个T类型的数组
应用:我们有这样一个需求,给一组数据中大于20的数字乘以3
//1.先定义一个数组
var numbers = [21, 19, 7, 12]
//2.创建一个有一个参数一个返回值的闭包函数
var closure = {(number:Int) -> Int in
var result = number
if number > 20 {
result *= 3
}
return result
}
//3.调用map函数
print(numbers.map(closure))
由于swift有类型推断的功能,我们可以这样写
let mappedNumbers = numbers.map({ number -> Int in
if number > 20{
return 3 * number
}
return number
})
如果没有逻辑判断,给所有值统一乘以3,我们甚至可以这样写
let mappedNumbers = numbers.map({ number -> Int in
return number*3
})
再简洁点
let mappedNumbers = numbers.map({ number in
number*3
})
如果你要将数组中的值全部替换为0你可以像下面这样
let mappedNumbers = numbers.map({_ in
return 0
})
我们测试一下 for ... in 和 map的速度 测试1:数组numbers的数字变为 0
for ... in
var numbers = Array(repeating: 3, count: 1000000)
var date1 = NSDate()
for i in 0..<numbers.count{
numbers[i] = 0
}
print(NSDate().timeIntervalSince(date1 as Date))
运行两次测试数据
0.0242440104484558 0.0248509645462036
map
var numbers = Array(repeating: 3, count: 1000000)
var date1 = NSDate()
var newNumbers = numbers.map({_ in
return 0
})
print(NSDate().timeIntervalSince(date1 as Date))
运行两次结果
0.219065964221954 0.201902985572815
我测试一下小数据 同时给100个数字的数组设置值 for ... in
0.000165998935699463
map
0.0013270378112793
结论: 在执行速度上还是for...in 比较快
问题1 :map的优势在哪里呢?
public func sorted(by areInIncreasingOrder: (Element, Element) -> Bool) -> [Element]
参数:
areInIncreasingOrder 两个参数一个返回值得闭包
我们给1万个数组进行排序,测一下for in 循环排序的时间
// 冒泡排序法
ar date1 = NSDate()
numbers.sort(by: {$0 > $1})
var swap:Int
for i in 0..<numbers.count{
var num = numbers[i]
for j in i..<numbers.count{
if num < numbers[j]{
(num,numbers[j]) = (numbers[j],num)
}
}
}
运行结果
3.54646998643875 3.48700600862503
使用sort 对100万个数字进行排序
var numbers = Array(repeating: 3, count: 1000000)
for i in 0..<numbers.count{
numbers[i] = i
}
var date1 = NSDate()
numbers.sort(by: {$0 > $1})
print(NSDate().timeIntervalSince(date1 as Date))
运行结果
2.71596896648407 2.66568303108215
结论:
如果使用排序建议使用苹果给我们提供的方法