如何在Swift中创建具有n维的多维数组?

时间:2015-11-22 14:28:45

标签: arrays swift multidimensional-array filesystems dynamic-programming

例如,asume

var hierarchicalFileSystem: [[String]] = []

这允许一个人支持一层文件夹,但似乎没有办法在Swift中创建一个像上面那样的数组,但是嵌套的String数组的数量是未定义的。

我在这里错过了什么吗?

4 个答案:

答案 0 :(得分:2)

字符串数组(数组数组......)对表示文件系统没有多大意义。

我反而建议使用一个类或结构来表示文件系统中的对象。也许是这样的:

struct FileSystemObject {
    let name: String
    let extension: String?
    let isFolder: Bool
    let contents: [FileSystemObject]?
}

这样的事情让我们很好地代表了一个文件系统。

let fileSystem = [FileSystemObject]()

所以,这里的fileSystem变量是FileSystemObject的数组,它代表根。根目录中的每个对象都有自己的一组详细信息(它的名称,文件扩展名,如果它有一个,以及它是否是一个文件夹),如果它是一个文件夹,它有一个非零{{1}如果它是一个非空文件夹,contents contents数组FileSystemObject包含更多文件系统对象(其中一些文件夹当然是包含内容的文件夹)。< / p>

答案 1 :(得分:2)

您可以做的是使用AnyObject创建一个数组并根据需要添加新的深度

var fileSystem: [AnyObject] = []

这对于表示文件系统来说是一种非常糟糕的方式,你应该采用某种树结构,如

struct Node {
    children: [Node]?
    parent: Node?
    name: String 
}

答案 2 :(得分:0)

Swift是类型安全的语言。您必须声明变量的类型,或将其设置为AnyObject,但请不要。所以,回答你的问题:它可能:

var array: [AnyObject] = [[[1,2,3], [1,2,3]], [[1,2,3],[1,2,3]]]

但这太糟糕了。尝试找出更好的代表问题。也许是定制结构。

答案 3 :(得分:-1)

你可以拥有任意数量的维度数组。这是个好主意吗?我不认为......

var threeDArray: Array<Array<Array<String>>> = []
let oneDArray = ["1","2","3"]
let twoDArray1: Array<Array<String>> = [oneDArray, oneDArray, oneDArray, oneDArray, oneDArray]
let twoDArray2 = twoDArray1 + [["4","5","6"],["7","8","9"]]
threeDArray.append(twoDArray1)
threeDArray.append(twoDArray2)
let arr = [threeDArray,threeDArray,threeDArray]

print(arr.dynamicType) // Array<Array<Array<Array<String>>>>