簡體   English   中英

使用Swift排序兩個數組

[英]Order two arrays using Swift

問題如下:

我有兩個數組,一個數組包含對象,第二個數組包含按ID排序的CoreData實體:

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

我需要按照與對象相同的順序對實體進行排序。 *實體目標尚未保存

我可以在一個循環中完成一個循環,並創建第三個數組,但是它很慢,並且使用的內存比應有的多(我的數組有時可以處理100個以上的實體)

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
        }
    }
}

上面的代碼可以正常工作,但是聞起來不夠好。 有什么建議如何使用內置的Swift更優化的解決方案?

這實際上不是一個Swift問題。 這是一個算法問題。 您可以使用任何一種語言以相同的方式進行操作。

首先,建立從ID到實體的映射。 然后,使用地圖有效地查找實體。

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)
    }
}

您可以用第二行替換第二個循環:

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

我發現在這里使用flatMap可以使代碼更清晰,但是如果您不熟悉它,則可能更喜歡顯式循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM