我有一个带有以下对象的对象数组。它包含子属性,该子属性实际上是具有相同类型的另一个对象数组,并且此结构继续进行。 我现在真正想要的是要访问数组中所有元素的所有子元素。
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
}
答案 0 :(得分:3)
对于树,您需要一个可自行调用的递归函数。
我建议将 children 声明为非可选的空数组,而不是单数名称( child )和未指定的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)
答案 1 :(得分:1)
这是一种根据您的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 }
答案 2 :(得分:-1)
这是我使用递归解决的方法
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
}
}