2017-05-22 1 views
0

J'ai une application qui permet à un utilisateur de sélectionner des éléments d'une structure arborescente qui sont ensuite passés à une méthode qui construit un rapport. L'élément est le plus petit niveau de granularité et contient une valeur d'identifiant. J'ai besoin de produire un objet énumérable qui peut être utilisé pour produire des rapports de niveau estival et des rapports d'éléments individuels. Par exemple, l'image ci-dessous montre l'arbre et la structure du rapport de désir. enter image description hereC# - Traverser des noeuds d'un arbre et identifier un niveau

Ce dont j'ai besoin, c'est de pouvoir identifier ou marquer les éléments qui doivent être imprimés individuellement. En d'autres termes, si l'élément n'est trouvé dans aucun groupe d'enfants, marquez-le comme il faut pour imprimer un individu. Ceci est important car il est possible que l'élément existe dans plusieurs groupes. Comment puis-je analyser l'arborescence et vérifier si l'élément existe dans un nœud enfant?

Les classes article et itemset (groupes) sont les suivantes:

public class Item 
{ 
    public int Property1 { get; set; } 
    public int Property2 { get; set; } 
    public int Property3 { get; set; } 
    public int Property4 { get; set; } 
} 

public class ItemSet 
{ 
    public List<Item> Items { get; set; } 
    //. 
    //. 
    //. 
    //. 
    public List<ItemSet> ItemSets { get; set; } 



} 

Notez que itemset peut contenir d'autres ensembles d'objets. En outre, la liste des éléments comprend tous les éléments, y compris les éléments dans les enfants. J'ai besoin d'un mécanisme pour vérifier si l'objet existe à ce niveau seul.

MISE À JOUR

Pour clarifier davantage, j'ai ajouté des diagrammes de classes résumées pour illustrer les relations/composition des articles, itemsets et l'application en tant que whole.This est une base de code existant ainsi et donc je fais pas beaucoup de flexibilité et doit faire avec la plupart de ce qui existe. Quand getAllItems() est appelée sur un ensemble partiel, elle renvoie toutes ses parties, même s'il s'agit d'un élément appartenant à un ensemble imbriqué. Je dois être en mesure de déterminer si c'est une personne décédée ou un enfant d'un sous-ensemble.

enter image description here

+0

Vous semblez être mélanger beaucoup de termes différents dans votre question qui le rend vraiment difficile à suivre. Qu'est-ce qu'un puits et comment se rapporte-t-il à un «objet»? Qu'est-ce qu'un ItemSet et comment est-il lié à un groupe? Que considérez-vous comme un nœud enfant et comment cela se rapporte-t-il à un puits ou à un élément ou à un groupe ou à un ItemSet? – NetMage

+0

Désolé un puits est un objet. Les éléments existent dans un ItemSet qui est aussi ce que j'appelle un groupe ou un noeud dans l'arbre. Je vais clarifier. – LCaraway

+0

Est-ce que vous montrez des éléments de votre exemple qui doivent être marqués? Comment savez-vous qu'ils existent? – NetMage

Répondre

0
foreach (var item in itemSet.getAllItems()) 
{ 
    if (item.Parent == itemSet) 
    { 
    // Is child of itemSet 
    } 
    else 
    { 
    // Is descendant of nested itemSet 
    } 
}