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

How would you create a multidimensional array with n dimensions in Swift?

例如,假设

var hierarchicalFileSystem: [[String]] = []

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

我是不是漏掉了什么?

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

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

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

这样的事情让我们可以很好地表示文件系统。

let fileSystem = [FileSystemObject]()

所以,这里的 fileSystem 变量是一个 FileSystemObject 数组,它代表根。根目录中的每个对象都有自己的一组详细信息(它的名称、文件扩展名(如果有的话)以及它是否是文件夹),如果它是文件夹,则它有一个非零 contents 属性,如果它是一个非空文件夹,FileSystemObjectcontents 数组包含更多文件系统对象(其中一些当然是文件夹,它们本身包含内容)。

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

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

但这太糟糕了。尝试为您的问题找出更好的表示形式。也许自定义结构。

你或许可以做的是用 AnyObject 创建一个数组,并根据需要添加新的深度

var fileSystem: [AnyObject] = []

然而,这将是一种非常糟糕的文件系统表示方式,您真的应该使用某种树结构,例如

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

您可以拥有任意多维数组。这是个好主意吗?我不认为...

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>>>>