2011-05-29 21 views
10

Tal vez suena raro, pero después de un largo tiempo de programación, acabo de ordenar ordenando. Todo fue como esperaba, hasta que traté de ordenar una serie de cadenas que contenían dos cadenas idénticas en el interior. Veamos:Ordenando una matriz de cadenas en C#

Suponga que tiene la siguiente:

string[] testArray = new string[] 
    { 
     "aa", 
     "ab", 
     "ac", 
     "ad", 
     "ab", 
     "af" 
    }; 

Array.Sort(testArray, StringComparer.InvariantCulture); 

En esta situación me sale un sencillo conjunto de valores nulos. Me di cuenta de que este comportamiento se debe a que los valores dentro de la matriz no son valores distintos. ¿Hay una mejor explicación para esto? ¿Cómo ordeno una matriz no específica?

+9

"Tengo que este comportamiento se debe a que los valores dentro de matriz no son valores distintos" - poco probable. –

+1

¿Estás seguro de que realmente obtienes valores nulos con el código proporcionado? Lo compruebo y funciona correctamente –

+1

Tómese su tiempo para verificar que el problema surja del código publicado. –

Respuesta

36

Este fragmento de código funciona correctamente enter image description here

+0

Me disculpo humildemente! Hice un par de pruebas ayer y parecía que el comportamiento se debía a valores no distintivos dentro de la matriz. Volví a probar todo y funciona correctamente. El error probablemente fue en otro lugar. Gracias por la paciencia! Otra pregunta: cuando un método de clasificación puede dar como resultado la matriz que contiene valores nulos? Gracias –

3

Si tiene problemas con los números (por ejemplo 1, 2, 10, 12, que serán ordenadas 1, 10, 12, 2) que puede utilizar LINQ:

var arr = arr.OrderBy(x=>x).ToArray(); 
0

En realidad, yo aún no hay valores nulos:

dado:

static void Main() 
     { 
      string[] testArray = new string[] 
      { 
       "aa", 
       "ab", 
       "ac", 
       "ad", 
       "ab", 
       "af" 
      }; 

      Array.Sort(testArray, StringComparer.InvariantCulture); 

      Array.ForEach(testArray, x => Console.WriteLine(x)); 
     } 

obtuve:

enter image description here

Cuestiones relacionadas