Umieszczanie tablicy w tablicy

0

Hej,

Mam mały problem i chyba udało mi się nawet zidentyfikować przyczynę problemu, ale nie do końca rozumiem dlaczego tak się dzieje i jak sobie z tym poradzić.

Mam klasę, która zawiera tablicę:

private static double[,] savingsMatrix;

oraz metodę:

 private static void createSavingsVector() 
        {
            double[,] matrix = savingsMatrix;
            double[,] vector = new double[3, 3];

            for (int z = 0; z < 3; z++)
            {
                vector[z,0]=0;
                for (int i = 0; i < 4; i++)
                {
                    for (int j = 0; j < 4; j++)
                    {
                        if (vector[z,0] < matrix[i, j]) 
                        { 
                            vector[z,0] = matrix[i, j];
                            vector[z, 1] = i;
                            vector[z, 2] = j;
                        }
                    }
                }
                matrix[(int) vector[z, 1],(int) vector[z, 2]] = 0; //tutaj
            }
            savingsVector = vector;
        }

Wartości z tablicy savingsMatrix powinny zostać zapisane w tablicy matrix i to na nich powinien operować program. Natomiast program zeruje mi tablicę savingsMatrix (tam gdzie to zaznaczyłem w kodzie), zamiast zerować "matrix". Czy możecie mi wytłumaczyć dlaczego tak się dzieje i jak najłatwiej sobie z tym poradzić?

Z góry dzięki! ;)

1

Jeśli chcesz żeby obie tablice miały te same wartości to musisz skopiować elementy jednej tablicy do drugiej. Przeczytaj ten art:
Szczególnie podpunkt Kopiowanie Tablic

1

Najpierw robisz matrix = savingsMatrix, potem matrix[(int) vector[z, 1],(int) vector[z, 2]] = 0;. Tak się nie robi, matrix nie jest kopią savingsMatrix, tylko inną referencją do obiektu matrix. Jeśli chcesz wyzerować matrix, to po kiego grzyba w ogóle inicjujesz tę zmienną wartościami innej zmiennej?

0

Tak, właśnie przypuszczałem, że chodzi o wskaźniki. Matrix zeruję o po to by posortować jej wartości od największej do najmniejszej (pisałem to trochę na szybko i ten sposób wydał mi się najprostszy).

@szopenfx dzieki za linka. Z pewnością się przyda. ;)

1

Jak potrzebujesz coś sortować to się może zainteresuj LINQ.

1 użytkowników online, w tym zalogowanych: 0, gości: 1