【发布时间】:2021-05-05 20:44:10
【问题描述】:
假设我有 struct :
struct Planet {
var id : UUID
var name: String
...
}
我有一个这样的结构数组,它是根据从数据库中获取的数据构造的。我将其用于浏览器中的表单,用户可以:
- 编辑字段(例如更改行星名称)
- 创建一个或多个新行星
此时用户可能不会删除行星,但如果解决方案也支持它会很棒
提交表单后,我得到一个包含这些结构的数组(顺序也与原始的不同)。用第二个数据更新原始数组中的数据的最佳/最有效方法是什么。
我目前的想法是:
- 将原始数组映射到 key= id, value= aPlanetStructure 的字典
- 循环遍历第二个数组(使用已编辑的数据),如果可以在字典中检索到该“键”(=来自第一个数组的数据)-> 更新那里的结构,如果不能在第一个数组中创建一个额外的星球.
我不确定这是否是一种好方法,似乎有一种更有效的方法(但我想不出)。它也不支持删除行星
【问题讨论】:
-
你只需要获取你所在星球的索引并更新对应的元素
-
不幸的是,这并不是那么简单:表单中的订单与数据库中的订单不同(它完全未排序)。 + 如果删除一个索引,索引到索引也会出现问题
-
如果您还负责后端,您可以发送三个字典
deleted/added/modified以及相应的数据。或者加载整个数据集并使用 diffable 数据源。 -
当从数据库发送到表单时:没有用,因为用户会更改它,那时我们不知道什么是哪个类别。当从表单发送回来时,我们不能将其拆分为 3 个字典,因为表单是通过 HTML 提交作为一个整体发送的