简体   繁体   中英

Order two arrays using Swift

The problem is the follow:

I have two arrays, one with objects, the second with CoreData entities sorted by ids:

var objects  = [["id":5],["id":1],["id":3]]
var entities = [["id":1],["id":3],["id":5]]

I need to sort the entities in the same order as the objects. * the entities aim saved yet

I can do it through a loop in a loop, and creating a third array but it is slow and use more memory than it should (My arrays will handle more than 100 entities sometimes)

let count = objects.count
var finalArray = []()
for i in 0..<count {
    let id = objects[i].id
    for k in 0..<count {
        if entities[k].id == id {
            finalArray += [entities[k]]
            break
        }
    }
}

The code above does work, but it doesn't smells good enough. Any suggestion how to use a build-in Swift more optimal solution?

This isn't really a Swift question. It's an algorithm question. You'd do it the same way in any language.

First, build a map from id to entity. Then, use the map to look up the entities efficiently.

var entityForId = [Int:MyEntity]()
for entity in entities {
    entityForId[entity.id] = entity
}

var finalArray = [MyEntity]()
for object in objects {
    if let entity = entityForId[object.id] {
        finalArray.append(entity)
    }
}

You can replace the second loop with a single line:

var finalArray = objects.flatMap({ entityForId[$0.id] })

I find the use of flatMap makes the code clearer here, but if you're not familiar with it, you might prefer the explicit loop.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM