[英]swift more efficient way to search array for match of different types
我正在使用Swift 3在具有與目標x,y位置匹配的ax,y位置的數組中找到GKGraphNode。 以下是節點的初始化。 您可以看到每個節點都有一個名為gridPosition的vector_int2坐標。 我創建這些節點的數組以匹配地圖的六邊形網格。
class HexGraphNode : GKGraphNode {
var gridPosition: vector_int2!
required init(gridPosition: vector_int2) {
super.init()
self.gridPosition = gridPosition
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
我需要能夠搜索此數組以找到占用某些特定網格坐標的節點。 我正在使用下面的功能。 當地圖較小(例如少於500個節點)時,此功能可以正常工作。 但是,隨着數組的增長,程序會變慢到無法接受的地步。 我需要一種更有效的方法來搜索數組並找到匹配的節點,而不必每次都從索引零開始。 我在尋找其他貼子,但是它們似乎總是在比較相同類型的對象。 在這種情況下,我需要將對象的屬性(node.position)與其他類型(包含x,y整數的vector_int2)進行比較。
func node(atGridPosition position: vector_int2) -> NodeType {
var result: NodeType!
for node in self.nodes as! [NodeType] {
if node.gridPosition.x == position.x && node.gridPosition.y == position.y {
result = node
break
}
}
return result
}
任何幫助將不勝感激。
如果節點的網格位置沒有動態變化,則可以保留節點字典,而不是(或除此以外)對數組進行排列。 如果您的網格具有固定(或最大)的寬度或高度,則可以將x,y坐標轉換為單個整數值,以用作字典中的鍵。 否則,您可以使用兩級字典。
這樣,訪問節點將是O(1)操作,而不是O(n / 2)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.