如何从Swift 3数组中的对象中提取值并将其与不同数组中不同对象的值进行比较或映射?

时间:2016-12-13 00:37:52

标签: arrays swift3

这是我的情景

  

让arrayA = [ObjectA]
  让arrayB = [ObjectB]

     

arrayA.count = arrayB.count

     

ObjectA!= ObjectB

     

objectA.someProperty = objectB.someOtherProperty

我想基于公共属性值有条件地将arrayA中的对象映射到arrayB中的对象,但我不确定如何执行此操作。

2 个答案:

答案 0 :(得分:0)

我不确定你的意图,但你可以这样写:

class ObjectA {
    var someProperty: String

    init(someProperty: String) {
        self.someProperty = someProperty
    }
}

class ObjectB {
    var someOtherProperty: String

    init(someOtherProperty: String) {
        self.someOtherProperty = someOtherProperty
    }
}

let arrayA: [ObjectA] = [
    ObjectA(someProperty: "a"),
    ObjectA(someProperty: "b"),
    ObjectA(someProperty: "c"),
]
let arrayB: [ObjectB] = [
    ObjectB(someOtherProperty: "A"),
    ObjectB(someOtherProperty: "B"),
    ObjectB(someOtherProperty: "C"),
]

assert(arrayA.count == arrayB.count)

zip(arrayA, arrayB).forEach{ objectA, objectB in objectA.someProperty = objectB.someOtherProperty }

或者只是使用for-in:

for i in arrayA.indices {
    let objectA = arrayA[i]
    let objectB = arrayB[i]
    objectA.someProperty = objectB.someOtherProperty
}

我不知道除上述之外的任何其他更简单的符号。

答案 1 :(得分:0)

以下是我如何管理这个:

for objectA in arrayA {
    let someProperty = objectA.someProperty
    for objectB in arrayB {
        if objectB.someOtherProperty == someProperty {
            // run code that maps objectB to objectA
        }
    }
}