Проблема с динамическим созданием зубчатого массива в C # - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь сохранить каждую итерацию массива во время его сортировки.По какой-то причине неровный массив, который я возвращаю, просто становится массивом окончательно отсортированного массива.Мой код ниже, я не могу понять, почему любая помощь будет по-настоящему оценена.Спасибо.

namespace SortingUI.Utils
{
    public class Sorting
    {
        public static int[][] SortInt(int[] originalArray)
        {
            int length = originalArray.Length;
            int tempVal, smallest;
            int[][] iterations = new int[length-1][];

            for (int i = 0; i < length - 1; i++)
            {
                smallest = i;
                for (int j = i + 1; j < length; j++)
                {
                    if (originalArray[j] < originalArray[smallest])
                    {
                        smallest = j;
                    }
                }
                tempVal = originalArray[smallest];
                originalArray[smallest] = originalArray[i];
                originalArray[i] = tempVal;
                iterations[i] = originalArray;
            }

            return iterations;
        }
    }
}

1 Ответ

0 голосов
/ 04 марта 2019

Если я понимаю вашу проблему, причина того, что вы получаете те же значения (а не снимок), заключается в том, что вы храните ссылку на массив, а не копию самих значений.

Массивы ссылочные типы , поэтому, когда вы присваиваете их другой переменной, вы копируете только справочную , а не содержимое.Если вы измените содержимое, все ссылки будут отражать, что

Вы можете использовать Array.Copy для копирования значений в данный момент времени из originalArray

...

var tempVal = originalArray[smallest];
originalArray[smallest] = originalArray[i];
originalArray[i] = tempVal;

// Create some new memory
iterations[i] = new int[originalArray.Length];
// Copy the contents 
Array.Copy(originalArray, iterations[i], originalArray.Length);

Примечание это полностью не проверено, и я не знаю, работает ли остальная часть вашего кода, как предполагалось


ДополнительноРесурсы

Метод Array.Copy

Копирует диапазон элементов из одного массива в другой массив и выполняет приведение типов и упаковку по мере необходимости.

Массивы (Руководство по программированию в C #)

Типы массивов - это ссылочные типы, полученные из абстрактного базового типа Array .Поскольку этот тип реализует IEnumerable и IEnumerable, вы можете использовать итерацию foreach для всех массивов в C #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...