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")
考虑一个非空多维数组,其中没有空子数组,如何获取它的第一个叶子?
目前,我正在使用以下结构:
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")