У меня есть две коллекции (скажем, Set
и Array
). Каждый имеет Object/Struct
разного типа, но оба имеют primary key
.
struct A {
var name: String
var primaryID: Int
}
class B {
var kind: String
var primaryID: Int
}
У меня есть эти коллекции:
var setOfA: Set<A>
var arrayOfB: Array<B>
Мне нужно обновить arrayOfB
значением setOfA
. Например, переберите arrayOfB
, извлеките элемент из setOfA
(где primaryID равен) и обновите arrayOfB
.
будет выглядеть так:
for bElement in arrayOfB {
let a = setOfA.first(where: { $0.primaryID == bElement.primaryID })
bElement.kind = a.name // Just an example
}
Если эффективность first(where:)
равна O (n) (я действительно не знаю), приведенный выше код равен O (n ^ 2) (учитывая, что обе коллекции имеют одинаковую длину).
Единственное, о чем я могу думать, - это удалить каждый элемент set
, который я извлекаю, уменьшив внутренний цикл вдвое.
Есть ли лучший способ сделать это?