# Orden númerico para comparación de cadenas
Table of Contents
Orden númerico para comparación de cadenas – Novedad de .NET 10
En .NET 10 se introduce una funcionalidad llamada numeric ordering for string comparison, o ordenación numérica de cadenas. Esta mejora permite que cuando compares o ordenes cadenas con números dentro, el orden tenga en cuenta el valor numérico y no el orden lexicográfico tradicional.
📚 Problema actual (hasta .NET 8)
En .NET 8 y anteriores, si ordenas cadenas como:
var items = new[] { "file1", "file10", "file2" };Array.Sort(items);
Resultado: file1, file10, file2 (❌ No es lo esperado numéricamente)
¿Por qué? Porque el orden lexicográfico compara carácter por carácter:
“file1” vs “file10”: el ‘1’ es menor que ‘1’, pero el siguiente carácter ‘0’ en “file10” hace que se considere mayor que “file2”.
✅ ¿Qué hace .NET 10 con numeric ordering?
Introduce una nueva opción en StringComparer que reconoce los valores numéricos dentro de las cadenas, y los ordena correctamente como números.
StringComparer.Numeric
🧪 Ejemplo práctico
var items = new[] { "file1", "file10", "file2" };Array.Sort(items);
var archivos = new[] { "file1", "file10", "file2", "file20", "file3" };
// Orden tradicional (lexicográfico)Array.Sort(archivos);Console.WriteLine("Orden lexicográfico:");Console.WriteLine(string.Join(", ", archivos));
// Orden numéricoArray.Sort(archivos, StringComparer.Numeric);Console.WriteLine("\nOrden numérico:");Console.WriteLine(string.Join(", ", archivos));
Salida
Orden lexicográfico:file1, file10, file2, file20, file3
Orden numérico:file1, file2, file3, file10, file20
🧰 ¿Dónde usarlo?
Este nuevo comparador se puede usar en:
Array.Sort()
List
LINQ: OrderBy(x => x, StringComparer.Numeric)
Métodos personalizados de comparación
⚙️ ¿Cómo funciona internamente?
.NET 10 hace parsing de los fragmentos numéricos dentro de la cadena (como “10” en “file10”) y los compara como números enteros. Esto se basa en el comportamiento del algoritmo “natural sort”, similar al ordenamiento en el Explorador de Archivos de Windows.