Форум: "Начинающим";
Текущий архив: 2009.04.26;
Скачать: [xml.tar.bz2];
ВнизСравнение массивов Найти похожие ветки
← →
Timur (2009-03-12 19:55) [0]Здраствуйте, скажите как можно быстро сравнить массив относительно другого.
При полном совпадении данных возвратить true.
Например:
type
Ar = array of double;
function DifArray(A:ar, sizeA:integer, B:ar, bSize:integer):boolean;
-6 -6
55 55
12 12
-5 -5
-45 -45
-6 2
return false
Спасибо.
← →
Сергей М. © (2009-03-12 20:05) [1]Result := (Length(A) = Length(B)) and CompareMem(@A[0], @B[0], Length(A));
> sizeA
> bSize
Это вообще выкинь к лешему, ибо пятое колесо телеге
← →
Сергей М. © (2009-03-12 20:18) [2]пардон
Result := (Length(A) = Length(B)) and CompareMem(@A[0], @B[0], Length(A)*SizeOf(Integer));
← →
фыва (2009-03-12 20:22) [3]пардон
Result := (Length(A) = Length(B)) and CompareMem(@A[0], @B[0], Length(A)*SizeOf(double));
:)
← →
Palladin © (2009-03-12 20:25) [4]пардон
Result := (Length(A) = Length(B)) and CompareMem(@A[0], @B[0], Length(A)*SizeOf(a[0]));
:)
← →
Сергей М. © (2009-03-12 20:30) [5]Короче, сейчас выяснится, что тип array of Double был указан только для примера, а на самом деле подразумевался любой произвольный массив произвольной типоразмерности - вот тогда будет вселенский "пардон"))
← →
Юрий Зотов © (2009-03-12 20:34) [6]> вот тогда будет вселенский "пардон"
Не будет. Длина динамического массива (в байтах) сидит в его заголовке.
← →
Сергей М. © (2009-03-12 20:36) [7]
> Длина динамического массива
Все бы ничего, да вот тип элементов может оказаться дин.типом с управляемым временем жизни
← →
Юрий Зотов © (2009-03-12 20:41) [8]> Сергей М. © (12.03.09 20:36) [7]
Не имеет значения. Если элемент умер, ссылка на него в массиве все равно осталась. То есть, не изменилась ни длина массива, ни его содержимое.
← →
Сергей М. © (2009-03-12 20:49) [9]
> Юрий Зотов © (12.03.09 20:41) [8]
> Если элемент умер
Причем здесь смерть, если элементами массива могут быть не сами данные, а указатели на данные ? Вариант с единственным CompareMem при этом не выдержит никаких корректирующих "пардонов"
← →
Sapersky (2009-03-12 20:50) [10]Длина динамического массива (в байтах) сидит в его заголовке.
В элементах. Впрочем, размер элемента можно получить через TypeInfo или способом Паладина.
Все бы ничего, да вот тип элементов может оказаться дин.типом с управляемым временем жизни
Решаемо:
http://sapersky.narod.ru/files/TypInfoEx.rar (CompareData)
Не имеет значения.
Имеет. Например, две длинные строки могут содержать одинаковые данные, но иметь разные адреса, а CompareMem будет сравнивать именно адреса.
← →
Медвежонок Пятачок © (2009-03-16 10:42) [11]а CompareMem будет сравнивать именно адреса.
Ну массивы-то при этом все равно формально разные, если содержат ссылки на разные адреса, даже если по разным ссылкам случайно лежат одинаковые данные
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.04.26;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c