Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.04.26;
Скачать: CL | DM;

Вниз

Сравнение массивов   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
2-1237279953
igorntk
2009-03-17 11:52
2009.04.26
Как осуществить запись информации из TEdit


2-1237192533
petvv
2009-03-16 11:35
2009.04.26
Отслеживание изменений ФС


15-1235654209
Кто б сомневался
2009-02-26 16:16
2009.04.26
Анабиоз. Сон разума.


15-1235338204
Юрий
2009-02-23 00:30
2009.04.26
С днем рождения ! 23 февраля 2009 понедельник


4-1208772445
Alex
2008-04-21 14:07
2009.04.26
D5,D7 при установке на VMWARE - не работает debuger