Swift 数组

一, 基本函数

1,dropFirst dropLast 删除前后面元素
let numbers2 = [10, 22, 333, 3334, 3335]
print(numbers2.dropFirst(2))   // Prints "333, 3334, 3335"
print(numbers2.dropFirst(10)) // Prints "[]"
print(numbers2.dropLast(2))

//TODO:第一个元素匹配值为准,第一个满足删除第一个,返回其他,第一个不满足则返回其他全部, 去其他元素
let arr3 = numbers2.drop { (item) -> Bool in
    return item == 10
}
print(arr3) // [22, 333, 3334, 3335]
2,prefix suffix 获取前后面元素
//TODO:获取前几个
print(numbers.prefix(2))  // Prints "[1, 2]"
print(numbers.prefix(10))  // Prints "[1, 2, 3, 4, 5]"
  
//TODO:返回包含初始元素的子序列,直到谓词返回false并跳过其余元素 ,只取第一个元素
let str1 = ["dwdw", "cwcvwv", "aaaa", "dwedewdwe"]
let temp3 = str1.prefix { (item) -> Bool in
    return item == "dwdw"
 }
print(temp3)//  "dwdw"

//TODO:数组后几个
let numbers = [1, 2, 3, 4, 3, 4, 5, 3]
print(numbers.suffix(2))   // Prints "[4, 5]"
print(numbers.suffix(10))  // Prints "[1, 2, 3, 4, 5]"
3, split 分割元素
//TODO: 分割元素,以2作为分割点,不包括2
let line = "BLANCHE: I don't want realism. I want magic!"
print(line.split(separator: " ")) // ["BLANCHE:", "I", "don\'t", "want", "realism.", "I", "want", "magic!"]

//TODO:切割数组,切割次数,s忽略空数组, 2,从前匹配两个空格,其他是一组
let temp5 = line.split(maxSplits: 2, omittingEmptySubsequences: true) { (item) -> Bool in
            return item == " "
        }
print(temp5) // ["BLANCHE:", "I", "don\'t want realism. I want magic!"]

print( line.split(separator: " ", maxSplits: 2, omittingEmptySubsequences: true)) // ["BLANCHE:", "I", "don\'t want realism. I want magic!"]
4,替换 replaceSubrange
 //TODO:范围替换
var nums = [10, 20, 30, 40, 50]
nums.replaceSubrange(1...3, with: repeatElement(1, count: 5))
print(nums) // [10, 1, 1, 1, 1, 1, 50]
nums.replaceSubrange(5...6, with: [100,200])
print(nums) // [10, 1, 1, 1, 1, 100, 200]
nums.replaceSubrange(2...2, with: repeatElement(1000, count: 1))
print(nums) // [10, 1, 1000, 1, 1, 100, 200]
nums[2] = 2000
print(nums) // [10, 1, 2000, 1, 1, 100, 200]
5,满足者替换
//TODO: 从前往后第一个位置替换
var students = ["Ben", "Ivy", "Jordell", "Maxime"]
if let i = students.firstIndex(of: "Maxime") {
    students[i] = "Max"
}
print(students) // Prints "["Ben", "Ivy", "Jordell", "Max"]"

//TODO: 从后往前最后一个位置替换
var students2 = ["Ben", "Ivy", "Jordell", "Ben", "Maxime"]
if let i = students2.lastIndex(of: "Ben") {
     students2[i] = "Benjamin"
}
print(students2)  // Prints "["Ben", "Ivy", "Jordell", "Benjamin", "Max"]"
6,其他简易函数
 //TODO:数组的不同
print(students.difference(from: students2))
let temp6 = students.difference(from: students2) { (objc, item) -> Bool in
        print(objc + item)
        return objc == item
     }
print(temp6.forEach({ (item) in
     print(item)
}))

//TODO:一个数组是否是另个数组的开始
let arr1 = [1,2,3]
let arr2 = [1,2,3,4,5,6,7]
print(arr2.starts(with: arr1))

//TODO:数组相等
print([1,2,3].elementsEqual([2,3,4]))

//TODO:数组包含
print([1,2,3].contains(1))

//TODO:最小值
print(students2.min()!)
//TODO:最大值
print(students2.max()!)

//TODO:升排序
print([3,2,1,4,5,2].sorted())
//TODO:降序
print([3, 2, 1, 4, 5, 2].sorted(by: { (a, b) -> Bool in
    a > b
}))

二, 高阶函数

1, map 遍历
let possibleNumbers = ["1", "2", "three", "///4///", "5"]
//MARK: map,可以对数组中的每一个元素做一次处理
let arr = ["ddk", "asd", "cmd", "sd", "lp"]
let arr2 = arr.map { (item) -> Bool in
    return item.contains("a")
}
print(arr2)

let numbers = [1, 2, 3, 4]
let mapped = numbers.map {
  Array(repeating: $0, count: $0)
}
print(mapped)// [[1], [2, 2], [3, 3, 3], [4, 4, 4, 4]]

//MARK: 非空判断, map可能存在空值,  flatMap确定类型
let mapped2: [Int?] = possibleNumbers.map {
        str in Int(str)
 } // [1, 2, nil, nil, 5]
print(mapped2)
2, flatMap 遍历 如果是不包含nil元素的一维数组的和map的作用效果是一样的,所以推荐使用flatMap
//MARK: flatMap, 可以对数组中的每一个元素做一次处理,并且不存在空值
let arr3 = arr.flatMap { (item) -> [String] in
      return [item + "_js"]
}
print(arr3)

let flatMapped = numbers.flatMap {
   Array(repeating: $0, count: $0)
}
print(flatMapped) // [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]

let test = [1,2,3,4,5]
let result = test.flatMap({ (value) -> [String] in
    return [String(value), String(value * 5)]
})
print(result)

//MARK: 一维转二维
let test2 = [1,2,3,4,5]
let result2 = test2.flatMap({ (value) -> [[String]] in
    return [[String(value), String(value * 5)]]
})
print(result2)

//MARK: 多维转一维
let array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(array.flatMap({ $0 }))
3, compactMap filter 过滤nil
let possibleNumbers = ["1", "2", "three", "///4///", "5"]
let compactMapped: [Int] = possibleNumbers.compactMap {
    str in Int(str)
} // [1, 2, 5]
print(compactMapped)
 
//MARK: 过滤元素
let res2 = possibleNumbers.filter { (objc) -> Bool in
    return Int(objc) != nil
}
print(res2) ["1","2","5"]
4, 叠加
 let res = test2.reduce(1000) { (objc, item) -> Int in
   return objc + item
 }
print(res) // 1015

5, 包含

//MARK: - 包含
let res3 = possibleNumbers.contains { (objc) -> Bool in
   return objc == "5"
}
print(res3) //true
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容