Swift:获取多维数组第一个叶子的简单方法

Swift: simple way to get the first leaf of multidimensional array

考虑一个非空多维数组,其中没有空子数组,如何获取它的第一个叶子?

目前,我正在使用以下结构:

    let multidimensional = [[[[[[Int]]]]]]()
    let firstLeaf = multidimensional.first?.first?.first?.first?.first?.first
    print(firstLeaf)

有没有更简单的方法来实现相同的结果,即从这个数组中取出第一片叶子?

你可以试试

func finLeave(_ arr:Array<Any>) -> Int? {
    return arr.first is Array<Any> ? finLeave(arr.first as! Array<Any>) : arr.first as? Int 
}

print(finLeave([[[[[[[]]]]]]])) // nil
print(finLeave([[[[[[[1]]]]]]])) // Optional(1)
print(finLeave([[[[[[[23,45,5]]]]]]])) // Optional(23)

我会为数组创建一个扩展,并使用递归来循环数组值,直到我们到达第一个不是数组的元素

extension Array {
    func firstLeaf() -> AnyObject? {
        var res : AnyObject? = self.first as? AnyObject
        if let leaf = res as? Array<Any>
        {
            res = leaf.firstLeaf()
        }

        return res
    }
}


print([[[[[[[String]]]]]]]().firstLeaf())       //Optional(<null>)
print([[[[[[[1,2,3]]]]]]].firstLeaf())          //Optional(1)
print([[[[[[["B", "A", "R"]]]]]]].firstLeaf())  //Optional("B")