Procesar Jerarquías de Datos en C#

Toda aplicación necesita trabajar con datos jerárquicos, y un enfoque iterativo es demasiado complejo y es poco natural, por lo que en este post vamos a explicar cómo procesar jerarquías de Datos en C# con ejemplos explicativos.

Procesar Jerarquías de Datos en C#

Las jerarquías de datos son una forma eficiente y estructurada de organizar y representar información compleja en los diferentes lenguajes de programación. Las jerarquías de datos son especialmente útiles para representar relaciones entre diferentes elementos.

Estructuras de Datos en C# para Jerarquías Eficientes

Para comenzar, definiremos la clase BillingCategory, que se utilizará para representar las categorías de facturación en nuestra jerarquía de datos. La clase BillingCategory tiene tres propiedades: ID, Un identificador único que representa la categoría; Name, El nombre de la categoría y Parent, Un valor entero opcional que indica la categoría padre de la actual. .

public class BillingCategory
{
    public int ID { get; set; }
    public string Name { get; set; }
    public int? Parent { get; set; }
}

Luego tenemos el método GetBillingCategories(), que retorna una lista de categorías de facturación predefinidas. Aquí se muestra el código:

static List<BillingCategory> GetBillingCategories()
{
    return new List<BillingCategory>
    {
        new BillingCategory { ID = 1, Name = "First 1",  Parent = null },
        new BillingCategory { ID = 2, Name = "First 2",  Parent = null },
        new BillingCategory { ID = 4, Name = "Second 1", Parent = 1 },
        new BillingCategory { ID = 3, Name = "First 3",  Parent = null },
        new BillingCategory { ID = 5, Name = "Second 2", Parent = 2 },
        new BillingCategory { ID = 6, Name = "Second 3", Parent = 3 },
        new BillingCategory { ID = 8, Name = "Third 1",  Parent = 5 },
        new BillingCategory { ID = 8, Name = "Third 2",  Parent = 6 },
        new BillingCategory { ID = 7, Name = "Second 4", Parent = 3 },
        new BillingCategory { ID = 9, Name = "Second 5", Parent = 1 },
        new BillingCategory { ID = 8, Name = "Third 3",  Parent = 9 }
    };
}

Este método crea y devuelve una lista de instancias de la clase BillingCategory con valores de ejemplo para el identificador, el nombre y el padre de cada categoría de facturación. Puedes modificar esta lista según tus necesidades.

El siguiente algoritmo recursivo transforma los datos planos en una forma jerárquica:

static List<BillingCategory> BuildHierarchy(
     List<BillingCategory> categories, int? catID, int level)
{
    var found = new List<BillingCategory>();

    foreach (var cat in categories)
    {
        if (cat.Parent == catID)
        {
            cat.Name = new string('\t', level) + cat.Name;
            found.Add(cat);
            List<BillingCategory> subCategories =
                BuildHierarchy(categories, cat.ID, level + 1);
            found.AddRange(subCategories);
        }
    }

    return found;
}

Y finalmente el método que nos devuelve los datos de manera jerarquica.


static void Main(string[] args)
{
    List<BillingCategory> categories = GetBillingCategories();

    List<BillingCategory> hierarchy =
        BuildHierarchy(categories, catID: null, level: 0);

    PrintHierarchy(hierarchy);
}

static void PrintHierarchy(List<BillingCategory> hierarchy)
{
    foreach (var cat in hierarchy)
        Console.WriteLine(cat.Name);
}
      

Espero que los ejemplos en C# mostrado en ek blog te sean de ayuda para procesar jerarquías de datos en C#. Comparte el sitio en redes sociales.

Artículo Anterior Artículo Siguiente