代码之家  ›  专栏  ›  技术社区  ›  Abu Ul Hassan

访问所有数组元素的子节点

  •  0
  • Abu Ul Hassan  · 技术社区  · 6 年前

    我现在真正想要的是访问数组中所有元素的所有child。

      class Group
        {
            var groupinfo:NSDictionary?
            var groupBalanceInfo:NSDictionary?
            var collapsed=true
            var haveChilds=false
            var groupHieght=30.0
            var child:Any?
            var level:Int?
            var queryString:String?
            var parentIndex = [Int]()
            var index = 0
        }
    

    我试图找到所有的孩子和子孩子的计数,我尝试了以下,但似乎不起作用。

    func calculateCount()->Int
       {
       var allElementCount = 0
            var groups = agBalances.groups!
            for loop  in groups
            {
                if loop.child != nil
                {
                    groups = loop.child as! [Group]
                    allElementCount=allElementCount+groups.count
                    continue
                }
            }
            return allElementCount
        }
    
    3 回复  |  直到 6 年前
        1
  •  3
  •   vadian    6 年前

    对于树,需要一个调用自身的递归函数。

    我建议申报 作为非可选的空数组而不是单数名称( )未指明 Any?

    var children = [Group]()
    

    递归函数需要两个 inout

    func calculate(count: inout Int, in group: inout [Group])
    {
        if !group.isEmpty {
            count += group.count
            for child in group {
                calculate(count: &count, in: &child.children)
            }
        }
    }
    

    并称之为

    var groups = agBalances.groups!
    var groupCount = 0
    
    calculate(count: &groupCount, in: &groups)
    
        2
  •  1
  •   Bliss    6 年前

    下面是一个方法,可以根据您的 Group 模型

    var count = 0
    func getCount(groups: [Group]) -> Int {
        for group in groups {
            count += 1
            // recursive call of function for child
            if let child = group.child as? [Group] {
                getCount(groups: child)
            }
        }
        return count }
    
        3
  •  -1
  •   Abu Ul Hassan    6 年前

    下面是我如何解决它使用递归

      func calculateCount(groups:[Group])->Int
        {
            countElements=0
            var allElementCount = 0
            var groups = agBalances.group!
            for loop  in groups
            {
                allElementCount = search(childrens: loop)
                print("Printing Count: \(allElementCount)")
            }
            return allElementCount
        }
    func search(childrens: Group) -> Int {
        if childrens.child != nil
        {
            countElements=countElements+(childrens.child?.count)!
            for child in childrens.child! {
            let result = search(childrens: child)
            }
        }
        return countElements
    }
    

    }