繁体   English   中英

Swift中的一组可变数组

[英]An array of mutable arrays in Swift

我试图在Swift中实现一个邻接列表,基本上是一个列表集合,或者我想是一个可变数组的集合。 我在Java中编写了一个Depth Search First实现,我想在Swift中编写相同的内容。 此代码用于图表表示。 有关如何做到这一点的任何想法? 如果有帮助,这是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>(); 

    }

即使知道如何声明包含可变数组数组的变量也会很棒。 我没有在苹果或网络发布的书中找到任何关于如何做到这一点的信息。

您只需执行以下操作即可声明数组数组:

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

如果你想让它从一些空数组开始,你可以执行以下操作:

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

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

你的课可能如下:

class Graph {
    var adj : [[Int]]

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

或者,如果您想创建一个可以包含任何类型对象图形的类,您可以使用泛型:

class Graph<T> {
    var adj : [[T]]

    init(numberOfVertices: Int) {
        adj = [[T]](count: numberOfVertices, repeatedValue: [])
    }
}

这是与您的代码等效的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> ()
        }
    }
}

和一些'测试':

 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM