美文网首页美文共赏
swift中数组操作

swift中数组操作

作者: maxZhang | 来源:发表于2021-08-27 10:53 被阅读0次

数组的声明

可变关键字用var,不可变关键字用let,默认用一对[]表示
let swift_arr = [1, 2, 3, 4]
或,如果没有用到的话可以直接用_表示变量名,变量类型部分swift内部会自动推断
_ = [0, 1, 1, 2, 3, 5]
swift数组拼接操作
var mutableFibs = [0, 1, 1, 2, 3, 5]
mutableFibs.append(8) //[0, 1, 1, 2, 3, 5, 8]
mutableFibs.append(contentsOf: [13, 21]) //[0, 1, 1, 2, 3, 5, 8, 13, 21]
print("mutableFibs:", mutableFibs) //[0, 1, 1, 2, 3, 5, 8, 13, 21]
swift的值拷贝和写时复制

swift内部对于数组重新赋值的时候,这个时候不会发生copy操作,仅当操作时才会进行把原来数组的值复制到新数组中

var x = [1, 2, 3]
let y = x
x.append(4)
print("x:", x) //x: [1, 2, 3, 4]
print("y:", y) //y: [1, 2, 3]
for in迭代
迭代除了第一个元素外的部分
for i in x.dropFirst() {
    print("i", i)
}
//同时遍历下标和元素
for (num, element) in x.enumerated() {
     print("num: element:", num, element)
}
//查找数组中元素首次出现的下标
let index = x.firstIndex(of: 2)
print("index:", index ?? -1)
print("index: \(index ?? -1)")
map形变
//对数组中元素进行形变,每个元素+2
let resultArr = x.map{$0 + 2}
print("resultArr中元素进行形变:\(resultArr)")
        
//对数组中的元素进行形变,每个元素的平方
let resultArr4 = x.map{fib in fib*fib}
print("resultArr4中元素进行形变:\(resultArr4)")
filter筛选

对于数组中的元素按照某种规则进行筛选

let nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
//筛选数组中的元素为偶数的元素,返回一个新数组
//let result_arr = nums.filter{num in num % 2 == 0}
//或
let result_arr = nums.filter{$0 % 2 == 0}
print("result_arr:", result_arr) //[2, 4, 6, 8, 10]
zip函数

作用是将两个序列的元素,一一对应合并生成一个新序列。一般不会单独使用,而是会和其它的方法配合使用。

let  a = [1, 2, 3, 4, 5]
let  b = [ "a" ,  "b" ,  "c" ,  "d" ]
let  c = zip(a, b). map  { $0 }
print ("c:", c) //c: [(1, "a"), (2, "b"), (3, "c"), (4, "d")]

自定义实现类似功能,例如找出二维数组中相邻元素(相邻元素放入数组中)
swift中的extension与OC的category有点类似,但extension比起category更加强大和灵活,不仅仅可以同时扩展某种类型或结构体的方法,也可以protocol等结合使用

extension Array {
    func split(where condition:(Element, Element) -> Bool) -> [[Element]] {
        var result:[[Element]] = self.isEmpty ? [] :[[self[0]]]
        for (previous, current) in zip(self, self.dropFirst()) {
            if condition(previous, current) {
                result.append([current])
            } else {
                result[result.endIndex-1].append(current)
            }
        }
        return result
    }
}

//调用
let arr = [1, 2, 2, 2, 3, 4, 4]
let parts = arr.split{$0 != $1}
print(parts) //[[1], [2, 2, 2], [3], [4, 4]]
reduce

一般用来对所有元素的操作,例如进行单独运算或者统一转换类型等

let fibs_arr = [0, 1, 1, 2, 3, 5]
var total = 0
for num in fibs_arr {
    total = total + num
}
print("total:", total) //12
//或者
let sum = fibs_arr.reduce(0, +)
print("sum", sum) //12
//“象出两部分:一个初始值 (在这里是 ""),以及一个将中间值 (str) 与序列中的元素 (num) 进行合并的函数”
//“将一个整数列表转换为一个字符串,并且每个数字后面跟一个逗号和空格,那么可以这样:”
let arr_str = fibs_arr.reduce(""){str, num in str + "\(num),"}
print("arr_str:", arr_str)
for each和for in的区别

如果你想要对集合中的每个元素都调用一个函数的话,使用 forEach 会比较合适。但是在for each中的return 语句并不会终止循环,它做的仅仅是从闭包中返回,因此在 forEach 的实现中会开始下一个循环的迭代。

(1..<10).forEach { number in
      print(number)
      if number > 2 {return}//此时不会终止循环
 }

//把子视图中所有视图都加到self.view上
var subArrs = [view1, view2]//仅仅测试
subArrs.forEach(self.view.addSubview(_:))
关于数组切片

“切片和它背后的数组是使用相同的索引来引用元素的。因此,切片索引不需要从零开始”,可以使用“startIndex 和 endIndex 属性做索引计算”

let slice = fibs_arr[1...]
print("slice:", slice) // [1, 1, 2, 3, 5]
print(type(of: slice)) // ArraySlice<Int>”

相关文章

  • swift中数组操作

    数组的声明 可变关键字用var,不可变关键字用let,默认用一对[]表示 swift数组拼接操作 swift的值拷...

  • 当swift中的array中包含引用类型的对象

    “swift中的数组赋值进行的是copy操作”针对的是结构体,如果数组中的元素是类对象,那么数组赋值后,数组中的元...

  • 2019-05-05: 五:Swift中数组的使用?

    一:Swift中数组的使用? 二:数组的介绍? 三:数组的初始化? 四:对数组的基本操作? 五:数组的遍历? 六;...

  • 迟到的Swift入门 - 数组操作

    Swift数组操作 1. 数组的日常操作 1.0 声明数组 初始化空数组 初始化默认值的数组 2. 数组基本操作 ...

  • Swift学习系列 数组

    一、数组的基本操作 1、数组的定义 Swift中的数组跟OC类似 分为可变数组和不可变数组。数据类型为Array。...

  • 关于swift数组

    今天在对swift数组进行操作的时候,发现swift数组中元素的拷贝竟是直接的地址拷贝!当时,我需要新建一个数组,...

  • swift 数组操作

    数组: *懒加载 *数组加载元素homeListArray.append(item)*数组遍历

  • swift 数组操作

    stride函数[https://www.jianshu.com/p/aa6d9d873b5a]

  • swift 数组操作

    1.便利数组 2.便利除了数组中第一个元素以外的元素,使用dropFirst 3.便利除了数组中后3个元素(根据需...

  • Swift 中的数组操作(一)

    数组是每一种高级语言中最常用的一种数据结构。因为数组就是一类数据的列表,所以通过基本的类似于 for 循环的这种遍...

网友评论

    本文标题:swift中数组操作

    本文链接:https://www.haomeiwen.com/subject/arguiltx.html