Swift中的一个可变数组数组

我试图在Swift中实现一个邻接列表,基本上是一个列表的集合,或者我猜是一个可变数组的集合。 我在Java中编写了深度search优先实现,我想在Swift中编写相同的代码。 这个Graph代表的代码。 任何想法如何做到这一点? 这是Java中的代码,如果有帮助的话:

public class Graph { private List<Integer>[] adj; public Graph(int numberOfVertices) { adj = (List<Integer>[]) new List[numberOfVertices]; ... for(int i = 0; i < numberOfVertices; i++) adj[i] = new ArrayList<Integer>(); } 

即使知道如何声明一个包含一个可变数组的variables的variables也会很好。 我没有find任何有关如何在苹果或networking发布的书中这样做的信息。

这是你的代码的Swift等价物:

 class Graph { var adj : Array<Array<Int>> init (_ numberOfVertices: Int) { adj = Array<Array<Int>> (count: numberOfVertices, repeatedValue: []) for i in 1..numberOfVertices { adj[i] = Array<Int> () } } } 

和一些“testing”:

  11> var gr = Graph(5) gr: Graph = { adj = size=5 { [0] = size=0 [1] = size=0 [2] = size=0 [3] = size=0 [4] = size=0 } } 12> gr.adj[1].append (2) 13> gr.adj[1].append (10) ... 15> gr.adj[4].append (7) 16> gr.adj $R5: Int[][] = size=5 { [0] = size=0 [1] = size=2 { [0] = 2 [1] = 10 } [2] = size=0 [3] = size=0 [4] = size=1 { [0] = 7 } } 17> gr.adj[4][0] $R7: Int = 7 

您可以简单地通过执行以下操作来声明一个数组数组:

 var nestedArrays : [[Int]] = [] nestedArrays.append([1, 2]) nestedArrays[0].append(3) nestedArrays // [[1, 2, 3]] 

如果你想让它从一些空arrays开始,你可以这样做:

 var nestedArrays = [[Int]](count: 10, repeatedValue: []) 

然后它将从10个空数组开始

你的课堂可能是这样的:

 class Graph { var adj : [[Int]] init(numberOfVertices: Int) { adj = [[Int]](count: numberOfVertices, repeatedValue: []) } } 

或者,如果您想要创build一个可以使用任何types对象的图表的类,则可以使用generics:

 class Graph<T> { var adj : [[T]] init(numberOfVertices: Int) { adj = [[T]](count: numberOfVertices, repeatedValue: []) } }