Swift 数组1: 增删改查

1. 数组声明
// 系统识别结果为 array 是一个元素是Int类型的数组
let array = [0, 1, 2, 3, 4, 5, 6, 7, 8]
var array = [0, 1, 2, 3, 4, 5, 6, 7, 8]

// 系统识别为array 是一个元素是字符串类型的数组, 默认是空数组
var array: [String] = []

// 系统识别为array 是一个元素是字符串类型的可选数组
var array: [String]?

// 系统识别为array 是一个元素是字符串类型的可选数组, 默认是nil
var array: [String]? = nil
2. index: 获取下标
// 从下标2开始 往后第3个元素
// 返回对应的下标
let mm = array.index(2, offsetBy: 3)

// limitedBy: 从下标0-下标3范围内查找 从下标1开始, 往后第2个元素
// 返回对应下标, 是一个可选值
let kk = array.index(1, offsetBy: 2, limitedBy: 3)

// 找出元素3 在数组中第一次出现的下标, 返回可选的下标值
let index = array.firstIndex(of: 3)
// 找出元素3 在数组中最后一次出现的下标, 返回可选的下标值
let index = array.lastIndex(of: 3)
3. append: 添加元素
// 添加一个元素, 返回新数组
let newArray = array.append(9)
// 添加多个元素, 返回新数组
let newArray = array.append(contentsOf: [20, 21])
3.1 insert: 插入元素, 改变原数组, 无返回值
// 给下标n位置插入一个元素, n不能越界
array.insert(100, at: 3)

// 给下标n位置插入多个元素, n不能越界
array.insert(contentsOf: [100, 200], at: 3)
4. remove: 删除元素, 改变原数组, 无返回值
if let range = Range(NSRange(location: 0, length: 4)) {
     // 删除指定范围的元素
     // Range必须解包, 需要注意数组越界crash
    array.removeSubrange(range)
}
// 删除所有元素
array.removeAll()
// 删除所有元素, 保持数组的容量不变
array.removeAll(keepingCapacity: true)
// 删除元素值为 3 的元素
array.removeAll { (item) -> Bool in
   item == 3
}
// 删除下标为3的元素
array.remove(at: 3)
// 删除最后一个元素
array.removeLast()
// 删除第一个元素
array.removeFirst()
// 逆向删除3个元素
array.removeLast(3)
// 正向删除3个元素
array.removeFirst(3)
5. drop: 丢弃元素, 返回新数组
// 丢弃数组第一个元素, 返回值是新数组
let newArray = array.dropFirst()

// 丢弃数组最后一个元素, 返回值是新数组
let newArray = array.dropLast()

// 逆向丢弃数组5个元素, 返回值是新数组
let newArray = array.dropLast(5)
        
// 正向丢弃数组5个元素, 返回值是新数组
let newArray = array.dropFirst(5)

// 丢弃符合条件的元素
// 注意 闭包内如果返回了false 则不会继续执行, 按需使用
// 你可以试试将 item != 3 改为 item == 3
var array = [0, 1, 2, 3, 4, 5, 6, 7, 8]
let newArray = array.drop { (item) -> Bool in
    print("item = \(item)")
    return item != 3
}

print("newArray = \(newArray)")
// log结果: 
// item = 0
// item = 1
// item = 2
// item = 3
// newArray = [3, 4, 5, 6, 7, 8]
6. prefix: 正向获取前n个元素, 返回新数组
// 取前n个元素 返回新数组, n可以越界, 越界后返回完整数组
let newArray = array.prefix(3)

// 取下标n之前的元素, 不包含第n个元素 n不能越界
let newArray = array.prefix(upTo: 3)

// 取下标n之前的元素, 包含第n个元素 n不能越界
let newArray = array.prefix(through: 3)

// 正向遍历 不符合条件立即终止程序
let newArray = array.prefix { (item) -> Bool in
    return item != 4
}
7. suffix: 取后n个元素,非逆序, 返回新数组
// 取后n个元素 返回新数组,n可以越界, 越界后返回完整数组
let newArray = array.suffix(3)

// 取下标为n的元素之后的所有元素, n不可以越界
let newArray = array.suffix(from: 3)
8. replace: 用新数组替换指定范围内的元素
if let range = Range(NSRange(location: 0, length: 3)) {
     array.replaceSubrange(range, with: [20, 30, 40])
}
9. first: 查第一个元素
// 获取数组第一个元素, 返回可选值, 不存在第一个元素则返回nil
let element = array.first

// 获取符合条件后的第一个元素, 返回可选值, 不存在则返回nil
let element = array.first { (item) -> Bool in
      return item > 4
}
// 获取符合条件后的第一个元素
// 另一种简洁写法        
let element = array.first{ $0 > 4 }
10. last: 查最后一个元素
// 获取数组最后一个元素, 返回可选值, 不存在则返回nil
let element = array.last
11. 普通查找
// 查找下标为4的元素, 返回数组元素, 注意不能越界
let element = array[4]
12. 修改指定元素
// 将下标为4 的元素值修改为100, 注意不能越界
array[4] = 100
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容