arrays - 有没有办法对 Swift 数组执行批量更新?

标签 arrays swift

我有一个包含 1000 多个项目的数组。最初,数组元素的状态称为 initial

在某个时间点,我想将某些项目的状态更改为已更新

如果我一个一个地更改数组项,例如遍历数组并在满足条件时更新它们的值,则每次更新时我都会收到数组的 didSet 的回调。

我不想要这个。我真正想要的是对数组执行批量更新,因此,当我完成对数组中多个项目的更新时,我只得到一次回调。

这在 Swift 中可能吗?

最佳答案

最简单的方法是制作一个副本,根据需要修改它,然后再分配回去。例如:

var xs = [1,2,3,4] {
    didSet {
        print("SET")
    }
}

var ys = xs
ys[0] = 0
ys[2] = 100

xs = ys

(只打印一次“SET”。)

在你问之前:1000 项不是一个大数组。很少以这种方式复制它通常不是问题,除非存储的项目本身非常大。但是,如果复制真的成为一个问题怎么办?然后你可以走不安全的路线:

xs.withUnsafeMutableBufferPointer { (ptr) in
    ptr[0] = 1000
    ptr[1] = 2000
}

我有点打折 map 来解决这个问题,但在试图回应 Sulthan 的原因时,我有点说服自己放弃了。您绝对可以使用 map,尤其是考虑到您提到的那种用例。

let updatedIndexes = [0, 2]
xs = xs.enumerated()
    .map { (n, value) in
        return updatedIndexes.contains(n) ? State.updated : value
}

关于arrays - 有没有办法对 Swift 数组执行批量更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50204303/

相关文章:

arrays - 在 C 中,如何 "directly"将结构复制到数组成员?

ios - 从另一个 Controller 追加数组

ios - 如何使用 swift 从 Parse 上的用户指针检索数据

ios - 当 iPad 旋转时,ActionSheet 的 PopoverController 不会停留在窗口的中心

c++ - 如何正确地将字节数组反序列化回 C++ 中的对象?

python - 逻辑与嵌套 bool 数组

java - 打印二维字符数组

javascript - 为什么这个 React 状态数组不填充对象数据?

swift - 在 Sprite 进入另一个 Sprite 之前检查接触

ios - UIView 的程序化 "fuzzy"样式背景