Я создаю список смежности в Swift, храня массив узлов.Однако при добавлении ребра из существующего узла мне нужно проверить, существует ли ключ from в каком-либо из дочерних элементов, и проверяет, существует ли значение to в том же самом.Кажется, что это беспорядок st
func addEdge(from: String, to: String) {
//the full code for addEdge is incomplete here
if (children.contains{ $0.nodes[from] != nil}) {
for child in children {
if (child.nodes[from] != nil) {
if (!(child.nodes[from]?.contains{$0 == to})!){
child.nodes[from]?.append(to)
}
}
}
}
}
Children - это
var children = [Node]()
, а Node -
class Node: Hashable {
var nodes = [String:[String]]()
var hashValue: Int{ return nodes.hashValue }
static func == (lhs: Node, rhs: Node) -> Bool {
return lhs.nodes.keys == rhs.nodes.keys
}
}
Теперь это работает, но выглядит ужасно.Должен быть лучший способ в Swift, но что это?