Arrays 数组之间的匹配和合并信息
我从服务器获取具有以下属性的联系人列表:Arrays 数组之间的匹配和合并信息,arrays,swift,Arrays,Swift,我从服务器获取具有以下属性的联系人列表: 电话 名字 连接的 从设备中,我获得联系人的个人资料照片(服务器没有),这将生成一个包含以下信息的对象: 电话 名字 缩略图 我的目标是有一个合并了所有信息的单一列表。每个对象应如下所示: var itemsResult: [Contact] = [] for var item in listFromDevice { if let itemFromServer = listFromServer.filte
- 电话
- 名字
- 连接的
- 电话
- 名字
- 缩略图
var itemsResult: [Contact] = []
for var item in listFromDevice {
if let itemFromServer = listFromServer.filter({ $0.phone == item.phone }).first {
item.connected = itemFromServer.connected
itemsResult.append(item)
}
}
- 电话
- 名字
- 缩略图
- 连接的
var itemsResult: [Contact] = []
for var item in listFromDevice {
if let itemFromServer = listFromServer.filter({ $0.phone == item.phone }).first {
item.connected = itemFromServer.connected
itemsResult.append(item)
}
}
有没有更有效的方法?我阅读了
zip
和map
函数,但我不确定如何将它们应用到我的案例中。通过属性查找对象的有效方法是从属性作为键的字典开始。如果数组顺序对您很重要,则字典中的值可以作为数组的索引
下面是一个普遍的例子:
struct S {
let id : Int
}
let arr : [S] = [S(id:1328), S(id:43), S(id:2)]
首先,用必要的字典武装自己:
var d = [Int:Int]()
for pair in arr.enumerated() {
d[pair.element.id] = pair.offset
}
现在,通过id在阵列中查找非常高效和直接:
let idToFind = 43
if let ix = d[idToFind] {
let s = arr[ix]
print(s.id) // 43, we found the right one
}