根據您是否使用自定義集合類型,還是你想創造AdjacencyList
新實例時指定它們,你可以逃脫類似於:
class Vertex<VertexType> { }
class Edge<EdgeType> { }
class AdjacencyList<VertexType, EdgeType> {
var vertices: [Vertex<VertexType>] = []
var edges: [Edge<EdgeType>] = []
}
let list = AdjacencyList<String, Int>()
list.vertices // [Vertex<String>]
list.edges // [Edge<Int>]
或者,如果你希望能夠指定每一次,你可以做一些類似這樣(的代碼是在雨燕3一些集合類型,所以VC.Iterator.Element
應VC.Generator.Element
和Collection
變成CollectionType
如果您使用Swift 2)
class AdjacencyList <V, E, VC: Collection, EC: Collection
where VC.Iterator.Element == Vertex<V>, EC.Iterator.Element == Edge<E>> {
var vertices: VC
var edges: EC
init(vertices: VC, edges: EC) {
self.vertices = vertices
self.edges = edges
}
}
let arrayList = AdjacencyList<String, Int, Array<Vertex<String>>, Array<Edge<Int>>>(vertices: [], edges: [])
arrayList.vertices // [Vertex<String>]
arrayList.edges // [Edge<Int>]
// as long as Vertex and Edge are Hashable
let setList = AdjacencyList<String, Int, Set<Vertex<String>>, Set<Edge<Int>>>(vertices: [], edges: [])
setList.vertices // Set<Vertex<String>>
setList.edges // Set<Edge<Int>>
其中'EdgeCollectionType'和'VertexCollectionType'來自哪裏?他們是自定義集合類型還是讓我們說'相對類型的'集合'或'數組'? –
我期望使用'Array'和'Set',但我相信我所尋找的解決方案代碼將能夠適應任何符合'Collection'協議的自定義類型並接受一個泛型類型參數。能夠以某種方式容納'Dictionary'會很整潔,但是因爲這需要兩個類型參數,所以我覺得它會超出問題的範圍。 –