Domanda

Ho un matrice irregolare dichiarata come

int[][][] tmpA = new int[INT_WORKING_SIZE * 2][][];

I cercando di risolvere questo array con questo codice:

Array.Sort(tmpA, 0, INT_WORKING_SIZE*2, new MyArrayComparer());

e la mia classe:

  public int Compare(object x,object y)
    {
        if (x == null || y == null)
            return 0;
        int[][] arrayA = (int[][])x;
        int[][] arrayB = (int[][])y;

         int resultA = arrayA[1].Sum();
         int resultB = arrayB[1].Sum();

        return resultA.CompareTo(resultB);          
    }

ogni riga della matrice irregolare ha 2 allineamenti con 12 int.

Voglio ordinare l'array con l'aggiunta di tutti i 12 interi della seconda serie e la più piccola dovrebbe essere il primo.

Tuttavia il mio problema principale è che oggetto x, y sono spesso nulli e l'array ordinato ottiene tutti zeri.

qualche consiglio?

È stato utile?

Soluzione

Se ho capito bene, il problema è che stai tornando 0 quando una delle matrici è nullo, quando si dovrebbe essere restituendo 1 o -1 a seconda di quale non è nullo, e 0 solo quando entrambi sono nulli.

public int Compare(object x,object y)
{
    // changed code
    if (x == null && y == null)
        return 0;
    if (x == null)
        return 1;
    if (y == null)
        return -1;
    // end of changed code
    int[][] arrayA = (int[][])x;
    int[][] arrayB = (int[][])y;

     int resultA = arrayA[1].Sum();
     int resultB = arrayB[1].Sum();

    return resultA.CompareTo(resultB);          
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top