Присваивание и сравнение динамических массивов
Работа с массивами в PascalABC.NET имеет свои особенности, особенно если речь идёт о динамических массивах. В этой новости разберём, как правильно присваивать, копировать и сравнивать такие массивы.
🔹 Присваивание динамических массивов
Когда вы присваиваете один динамический массив другому через оператор :=, происходит ссылочное присваивание. Это означает, что обе переменные ссылаются на один и тот же массив в памяти. Любые изменения в одном массиве автоматически отразятся на другом.
Пример: var a := new integer[5]; // Создаём массив var b := a; // b ссылается на тот же массив,что и a b[0] := 10; // Теперь и a[0], и b[0] равны 10
Чтобы создать независимую копию массива, следует использовать встроенную функцию Copy(a).
Пример: var a := new integer[5]; // Создаём массив var b := Copy(a); // b — это копия массива a b[0] := 10; // Изменение b не затрагивает a
✦ Прямое сравнение массивов через оператор = проверяет ссылки, а не содержимое массивов. Даже если два массива содержат одинаковые элементы, они будут считаться неравными, если ссылаются на разные объекты в памяти.
Пример var a := new integer[5]; var b := new integer[5]; if a = b then // это сравнение вернёт False Println('Массивы равны') else Println('Массивы не равны');
✦ Для корректного сравнения содержимого массивов в PascalABC.NET нужно использовать метод ArrEqual, который проверяет, равны ли все элементы двух массивов.
Пример: var a := new integer[5]; var b := new integer[5]; if a.ArrEqual(b) then // Проверяет равенство всех элементов массива Println('Массивы равны') else Println('Массивы не равны');
✦ Для копирования массива используйте функцию Copy(a), чтобы избежать ссылочного присваивания.
✦ Для сравнения содержимого массивов используйте метод ArrEqual.