前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift3.0 - Array

Swift3.0 - Array

作者头像
酷走天涯
发布2018-09-14 14:54:36
3810
发布2018-09-14 14:54:36
举报
基本
  • 定义
代码语言:javascript
复制
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"]
  • 清空数组
代码语言:javascript
复制
list2.removeAll() //  如果定义为var
list2 = [] // 如果定义为var
list5.removeAllObjects() // var 和let 都可以
list5 = [] // 如果定义为var
  • 取代操作
代码语言:javascript
复制
shoppingList[4...6] = ["Bananas", "Apples"] // 将数组4...6 的范围用指定的数组取代
  • 插入移除操作
代码语言:javascript
复制
 shoppingList.insert("Maple Syrup", at: 0)
 let mapleSyrup = shoppingList.remove(at: 0)
 let apples = shoppingList.removeLast()
  • 遍历数组
代码语言:javascript
复制
 for item in shoppingList {
  print(item)
 }
 for (index, value) in shoppingList.enumerated() {
    print("Item \\(index + 1): \\(value)")
 }

高级
  • 认识map

看一下它的定义

代码语言:javascript
复制
func map<T>(_ transform: (Element) throws -> T) rethrows -> [T]

解释: T 为泛型 transform: 闭包函数 我们需要给它传入一个有参数有返回值的闭包函数 [T] 函数会返回给我们一个T类型的数组

应用:我们有这样一个需求,给一组数据中大于20的数字乘以3

代码语言:javascript
复制
//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有类型推断的功能,我们可以这样写

代码语言:javascript
复制
let mappedNumbers = numbers.map({ number -> Int in
    if number > 20{
      return 3 * number
    }
      return number
})

如果没有逻辑判断,给所有值统一乘以3,我们甚至可以这样写

代码语言:javascript
复制
let mappedNumbers = numbers.map({ number -> Int in
  return number*3
})

再简洁点

代码语言:javascript
复制
let mappedNumbers = numbers.map({ number  in
   number*3
})

如果你要将数组中的值全部替换为0你可以像下面这样

代码语言:javascript
复制
 let mappedNumbers = numbers.map({_ in 
   return 0
})

我们测试一下 for ... in 和 map的速度 测试1:数组numbers的数字变为 0

for ... in

代码语言:javascript
复制
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

代码语言:javascript
复制
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的优势在哪里呢?


sort 排序
代码语言:javascript
复制
public func sorted(by areInIncreasingOrder: (Element, Element) -> Bool) -> [Element]

参数:

areInIncreasingOrder 两个参数一个返回值得闭包

我们给1万个数组进行排序,测一下for in 循环排序的时间

// 冒泡排序法

代码语言:javascript
复制
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万个数字进行排序

代码语言:javascript
复制
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

结论:

如果使用排序建议使用苹果给我们提供的方法

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.10.07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本
  • 高级
  • sort 排序
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档