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: []) } }