C# algorithme pour générer de la hiérarchie
J'ai un fichier texte qui ressemble à ceci:
{ Id = 1, ParentId = 0, Position = 0, Title = "root" }
{ Id = 2, ParentId = 1, Position = 0, Title = "child 1" }
{ Id = 3, ParentId = 1, Position = 1, Title = "child 2" }
{ Id = 4, ParentId = 1, Position = 2, Title = "child 3" }
{ Id = 5, ParentId = 4, Position = 0, Title = "grandchild 1" }
Je suis à la recherche d'un générique de C# algorithme qui permettra de créer une hiérarchie d'objets à partir de ce. Un "Hiérarchiser" de la fonction, si vous voulez, qui transforme ces données en une hiérarchie d'objets.
Des idées?
modifier j'ai déjà analysé le fichier .NET objets:
class Node
{
public int Id { get; }
public int ParentId { get; }
public int Position { get; }
public string Title { get; }
}
Maintenant j'ai besoin de disposer les objets dans un objet graphique.
- Vous avez déjà le code qui gère l'analyse de ce fichier texte?
- Je ne vois pas ce qui rend l'élément { Id = 5 ... } un petit-enfant. Un petit-enfant doit avoir l'un des enfants en tant que parent, mais il a le même parent que tous les autres enfants. Ne devriez pas son ParentId être 2, 3 ou 4? Je suis aussi dans le flou sur ce que vous avez besoin de la "Position" pour. Peut-être qu'il se réfère à la commande des enfants de gauche à droite de la mode, et vous avez besoin de le préciser explicitement?
- Je suppose que la propriété position des commandes les enfants de chaque parent.
- AHelps, de ma faute, que c'était une faute de frappe. J'ai mis à jour le post.
- pbz, oui, j'ai déjà le code pour gérer l'analyse du fichier.
Vous devez vous connecter pour publier un commentaire.
Un grand merci à Jon et à mquander - vous les gars m'ont donné assez d'informations pour m'aider à résoudre ce dans une bonne, façon générique. Voici ma solution, un seul générique de la méthode d'extension qui convertit les objets en forme de hiérarchie:
Utilise cette petite classe de nœud:
Il est suffisamment générique pour travailler pour une variété de problèmes, y compris mon fichier texte en question. Chouette!
****Mise à JOUR****: Voici comment vous pouvez l'utiliser:
Hmm... je n'arrive pas à voir comment cela fonctionne. Comment puis 2 et 5, les deux ont des parent=1, position=0? Doit 5 parent 2, 3 ou 4?
D'accord, cette nouvelle version va à travers tous les nœuds à trois reprises:
Ce n'est pas bien encapsulé, joliment erreur de vérification, etc, mais il fonctionne.
Exemple de fichier texte:
De sortie:
Une fois que vous avez le fichier analysé dans vous pouvez suivre ce blog sur la façon d'assembler les objets dans une hiérarchie à l'aide de LINQ.
Je suppose que votre exemple incorrectement donne le mauvais parent de l'ID de l'objet #5. Cela devrait couvrir. Mises en garde: Suppose que le "premier" nœud a toujours un parent ID de zéro. Ignore toutes les nœuds qui ne sont pas finalement les descendants du nœud supérieur. Le comportement sera bizarre s'ils sont présentés avec des Id en double.
résultat:
Êtes-vous certain que la dernière ligne du ParentID est 1? Le dit le titre d'un petit-enfant, mais il serait un enfant de la "racine" si je suis en train de lire les choses correctement.
Voici l'exemple que @baran demandé: