Форум: "Основная";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
ВнизСравнить 2 record а Найти похожие ветки
← →
TButton © (2004-03-29 17:21) [0]сабж. есть массив record"ов и один record, который ищем в массиве.
function HasItemInBase(it: TItem): boolean;
var
i: integer;
begin
result:=false;
if high(base)=-1 then exit;
for i:=0 to high(base) do
if base[i]=it then
begin
result:=true;
Exit;
end;
end;
компилятор тыкает меня носом в выделеную строчку и говорит
[Error] Unit1.pas(87): Incompatible types
← →
TButton © (2004-03-29 17:22) [1]а сравнивать каждое поле - в лом. полей там достаточно.
← →
Digitman © (2004-03-29 17:27) [2]
> в лом
а мне вот тоже "в лом" спрашивать тебя о том, как декларирован массив
← →
Reindeer Moss Eater © (2004-03-29 17:31) [3]CompareMem
← →
TButton © (2004-03-29 17:34) [4][2]
виноват. исправлюсь.
base: array of TItem;
хотя мне это казалось очевидным.
← →
Reindeer Moss Eater © (2004-03-29 17:36) [5]хотя мне это казалось очевидным.
Наверное декларация самого типа TItem для всех тоже очевидна?
← →
Reindeer Moss Eater © (2004-03-29 17:38) [6]Хотя разницы вообще нет.
Ни как объявлен рекорд. Ни как объявлен TItem.
СоmpareMem даст ответ.
← →
TButton © (2004-03-29 17:41) [7]re 5
мож тогда сразу весь исходник кинуть? я думал что метод сравнения двух рекордов (одинаковых) не зависит от их декларации.
re 3, 6
счас попробуем.
← →
Digitman © (2004-03-29 17:42) [8]
> хотя мне это казалось очевидным
с чего бы "очевидным" ?
а мне, к примеру, очевидней было бы
array[0..N] of TItem
но и в том и ином случае без CompareMem не обойтись
← →
Digitman © (2004-03-29 17:46) [9]
> метод сравнения двух рекордов (одинаковых) не зависит от
> их декларации.
очень даже зависит
но в дан.случае речь о "методе сравнения" вовсе не идет
ты просто пытаешься перевалить на компилятор то, что он не вправе делать, как напротив равно и то что есть твоя обязанность
← →
TButton © (2004-03-29 17:47) [10]>но и в том и ином случае без CompareMem не обойтись
я не буду это комментировать. я просто спрошу, а нельзя было это сразу сказать? или просто по приколу меня по спрашивать? в любом случае, всем спасибо.
← →
TButton © (2004-03-29 17:49) [11]re 9
типа сам заварил кашу, сам и расхлебывай? сразу вспоминается афоризм "ничто так не ограничивает полет мысли программиста, как компилятор"
← →
Digitman © (2004-03-29 17:51) [12]
> TButton
смотри только не врюхайся с CompareMem в случае если хотя бы одно поле стр-ры содержит указатель
← →
TButton © (2004-03-29 17:54) [13]re 12
ну что вы =) для меня указатели - темный лес. серьезно, я ими почти не пользовался/пользуюсь, т.е. до тех пор пока нужда не заставит.
← →
Digitman © (2004-03-29 17:57) [14]
> TButton
надо понимать, и AnsiString не используешь ?!
Это ж мазохизм натуральный)
← →
TButton © (2004-03-29 18:08) [15]а что такое AnsiString? серьезно.
← →
Digitman © (2004-03-29 18:15) [16]AnsiString, also called a long string, represents a dynamically allocated string whose maximum length is limited only by available memory. It uses 8-bit ANSI characters.
A long-string variable is a pointer occupying four bytes of memory. When the variable is empty—that is, when it contains a zero-length string—the pointer is nil and the string uses no additional storage. When the variable is nonempty, it points to a dynamically allocated block of memory that contains the string value, a 32-bit length indicator, and a 32-bit reference count. This memory is allocated on the heap, but its management is entirely automatic and requires no user code.
Because long-string variables are pointers, two or more of them can reference the same value without consuming additional memory. The compiler exploits this to conserve resources and execute assignments faster. Whenever a long-string variable is destroyed or assigned a new value, the reference count of the old string (the variable’s previous value) is decremented and the reference count of the new value (if there is one) is incremented; if the reference count of a string reaches zero, its memory is deallocated. This process is called reference-counting. When indexing is used to change the value of a single character in a string, a copy of the string is made if—but only if—its reference count is greater than one. This is called copy-on-write semantics.
← →
Digitman © (2004-03-29 18:19) [17]по-русски "на огурцах" - тот самый тип String, который ты используешь повседневно, не задумываясь о том, что этот тип данных из себя представляет
← →
Тимохов © (2004-03-29 18:22) [18]ручками сравнивать каждое поле
лом на помойку
либо comparemem, но тогда про длинные строки и про указатели почитать
← →
han_malign © (2004-03-29 18:24) [19]>two or more of them can reference the same value without consuming additional memory
- кстати, с ShortString гораздо более вероятно наколоться, т.к. не факт, что очищены неиспользуемые символы, CompareMem даст различие на одинаковых строках...
← →
Verg © (2004-03-29 18:51) [20]
> han_malign © (29.03.04 18:24) [19]
> >two or more of them can reference the same value without
> consuming additional memory
> - кстати, с ShortString гораздо более вероятно наколоться,
> т.к. не факт, что очищены неиспользуемые символы, CompareMem
> даст различие на одинаковых строках...
Это одна из причин, почему кмпилятор не допускает сравнение струтурных данных.
Есть еще и record field alignment - какой уж тут comparemem....
← →
Defunct © (2004-03-29 19:47) [21]Свою функцию сравнения написать, будет наиболее быстрым решением. Некоторые поля можно опустить.
← →
Defunct © (2004-03-29 19:49) [22]Зы, CompareMem может облажаться, если рекорд неупакованный.
← →
TButton © (2004-03-29 19:56) [23]ну пока CompareMem не подводит
а на будущее - думаю сделать поле ID и по нему сравнивать.
← →
Defunct © (2004-03-29 20:02) [24]Еще лучше поля: Id и CheckSum когда сравнений много, и сравниваются большие блоки памяти. Заметно ускорит работу. А в случае совпадения контрольных сумм, провести уже тщательное (побайтовое) сравнение.
← →
TButton © (2004-03-29 20:07) [25]да нет. итемы лицензионные, будут снабжаться ИД, система не позволяет импортировать одну и ту же итему, поскольку используемые ID знаю только я, это очень затруднит кустарное производство и использование итемов.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.033 c