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.
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.