IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Hiérarchie par récursivité


Sujet :

C#

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Hiérarchie par récursivité
    Bonjour, alors voila j'ai une liste d'item qui ont chacun un nom,un ID et un Parent ID. avec la méthode récursive j’arrive a classer ces items dans un ordre de hiérarchie mais j'aimerai en fait pouvoir exécuter une action a chaque fois que je passe a un nouveau parent. Je n'arrive pas bien a comprendre dans la récursivité ou se fait le rappel a nouveau de la fonction et comment faire une action a cette endroit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    class Program
        {
     
            static void Main()
            {
                List<list> SPlist = new List<list>()                            // sera remplacer par la liste directement depuis sharpoint !!! 
                {
                    new list() { Id = 1, Text = "Item 1", ParentId = 0},
                    new list() { Id = 2, Text = "Item 2", ParentId = 0 },
                    new list() { Id = 3, Text = "Item 3", ParentId = 0 },
                    new list() { Id = 4, Text = "Item 1.1", ParentId = 1 },
                    new list() { Id = 5, Text = "Item 3.1", ParentId = 3 },
                    new list() { Id = 6, Text = "Item 1.1.1", ParentId = 4 },
                    new list() { Id = 7, Text = "Item 2.1", ParentId = 2 },
                    new list() { Id = 8, Text = "Item 2.1.1", ParentId = 2 },
                    new list() { Id = 9, Text = "Item 2.1.1.1", ParentId = 8 }
                };
     
     
     
                List<list> hierarchy = new List<list>();
                hierarchy = SPlist        
                                .Where(c => c.ParentId == 0)
                                .Select(c => new list()
                                {
                                    Id = c.Id,
                                    Text = c.Text,
                                    ParentId = c.ParentId,
                                    Children = GetChildren(SPlist, c.Id)
                                })
                                .ToList(); 
     
                HieararchyWalk(hierarchy);
                Console.ReadLine();
     
     
            }
            public static int i = 0;
            public static List<list> GetChildren(List<list> lists, int parentId)
            {
                return lists
                        .Where(c => c.ParentId == parentId)
                        .Select(c => new list
                        {
                            Id = c.Id,
                            Text = c.Text,
                            ParentId = c.ParentId,
                            Children = GetChildren(lists, c.Id),
     
                        })
                        .ToList();
     
            }
     
     
     
     
            public static void HieararchyWalk(List<list> hierarchy)
            {
     
                if (hierarchy != null)
                {
                    foreach (var item in hierarchy)
                    {
                        i++;
                        Console.WriteLine(string.Format(i+"------"+"{0} {1}", item.Id, item.Text));
     
                        HieararchyWalk(item.Children);
                    } 
                }
     
            }
        }
     
     
    }
    mon but ici serait d'avoir i qui est remis a 0 pour chaque nouveau parent et que j'ai en sorti console:

    1------1 Item 1
    2------4 Item 1.1
    3------6 Item 1.1.1
    1------2 Item 2
    2------7 Item 2.1
    3------8 Item 2.1.1
    4------9 Item 2.1.1.1
    1------3 Item 3
    2------5 Item 3.1

    ce qui me permettrait ensuite de connaitre le niveau de chaque element et par exemble de dire pour le niveau 1 : 1 espace le 2 : 2 espace etc et avoir :

    -Item 1
    -- Item 1.1
    --- Item 1.1.1
    -Item 2
    --Item 2.1
    ---Item 2.1.1
    ----Item 2.1.1.1
    -Item 3
    --Item 3.1


    Merci d'avance pour vos réponses et bonne journée!

  2. #2
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Pour ma part j'aurais construit l'objet de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Item
    {
       public int Id { get; set; }
       public string Text { get; set; }
       public List<Item> Children { get; set; }
    }
    Ainsi, ta hiérarchie est déjà en place

  3. #3
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    J'aurai aussi ajouté le parent

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class Item
    {
       public int Id { get; set; }
       public string Text { get; set; }
       public List<Item> Children { get; set; }
       public Item Parent { get; set; }
    }

Discussions similaires

  1. [XSLT] Sortie de template/boucle : par récursivité ?
    Par pegazuss5 dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 01/12/2010, 22h50
  2. Hiérarchie par la table de fait
    Par cyberg dans le forum SSAS
    Réponses: 5
    Dernier message: 28/10/2008, 09h08
  3. Résoudre par récursivité
    Par Lucas Panny dans le forum Langage
    Réponses: 2
    Dernier message: 21/10/2008, 09h38
  4. Chargement du tableau par récursivité
    Par JetliMohamed dans le forum Pascal
    Réponses: 4
    Dernier message: 13/01/2008, 18h42
  5. Réponses: 1
    Dernier message: 08/02/2007, 09h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo