2011-01-20 13 views
5

¿Cómo se ordena una Lista alfanumérica por el valor en la cadena [0]?Lista de clasificación <String[]>

+0

@jball: No es el primer carácter. Cada elemento es una matriz de cadenas y está ordenando por el primer elemento de esas matrices. Imagine, por ejemplo, el índice de un libro. Cada línea podría ser una 'cadena []' donde el primer elemento indica la palabra que se indexa y los elementos restantes son los números de página. Aquí tendría sentido ordenar por el primer elemento. – jason

+0

Estoy con @jball. –

+0

@Jason, ah lo leyeron mal. Estoy en mi juego hoy ... – jball

Respuesta

14

Trate

list.Sort((s, t) => String.Compare(s[0], t[0])); 

Esto ordenará lexicográfico por el primer elemento de cada matriz en list.

Dado que no sé exactamente lo que quiere decir con "alfanumérico", si necesita una cadena personalizada comparación de enrutamiento, usted debe hacer esto:

class MyStringComparer : IComparer<string> { 
    public int Compare(string s, string t) { 
     // details elided 
    } 
} 

y luego

var comparer = new MyStringComparer(); 
list.Sort((s, t) => comparer.Compare(s[0], t[0])); 
+0

Si las cadenas en la matriz pueden ser nulas, su solución podría ser más adecuada para string.Compare (s [0], t [0]) –

+0

¿cómo resolvería esto el requisito alfanumérico? Sin un comparador personalizado, ¿no sería incorrecto para "50A" y "100A"? – BrokenGlass

+0

@BrokenGlass: Tenga en cuenta que hice una observación sobre la comparación personalizada exactamente porque no sé a qué se refiere por "alfanuméricamente". – jason

2

toma un vistazo a este enlace here

tienen un muy buen ejemplo de la interfaz IComparer. puede usar esto, cree su propio Comparer y ejecute su lista a través de él.

-1

Este es un ejemplo de código terriblemente simplista/seudo ... Realmente se extiende aquí ...

MyclassZeroIndexComparer : IComparable, IList(Of String[]) 
{ 
    private List<String[]> listOfStringArrays; 

    //expose this as a public member somewhere... 
    private List<String[]> listofStringArrayZeroIndex; 

    //internally store a list of only the first item you want to index.... 
    //implement your own, add,remove,clear 

    void Add(foo item) 
    { 
    listofStringArrays.Add(Item); 
    listofStringArrayZeroIndex.add(item[0]); 
    } 

    // continue implementing other methods in the same manner. 
} 
Cuestiones relacionadas