ich nutze seit Jahren spezialisierte Listen und habe damit bisher keine Probleme gehabt. Nun brauche ich eine Liste mit einem Record mit einem Integer und einem String darin. Als ich diese Liste erstellen wollte, fiel mir ein, da gibt es doch TFPGMap, was IMHO genau das kann, was ich will. Also kurz in meine App eingebaut und nach einer Weile fiel mir auf, daß gleiche Strings nicht per IndexOfData gefunden werden. Nach langem Testen konnte ich das Problem ausfindig machen, es liegt daran, daß mein Programm einen String kürzt und trotz gleichem Inhalt, wird dieser nicht gefunden. Anbei der Code für ein kleines Testprogramm:
Code: Alles auswählen
program project1;
uses
fgl;
type
TMyMap = specialize TFPGMap<Integer, String>;
var
MyMap: TMyMap;
s: String;
begin
MyMap := TMyMap.Create;
s := 'AB';
MyMap.Add(1, s);
s := 'A' + 'B';
WriteLn(MyMap.IndexOfData(s), '[', s, ']'); // das geht
s := ' AB';
Delete(s, 1, 1);
WriteLn(MyMap.IndexOfData(s), '[', s, ']'); // das nicht
MyMap.Free;
ReadLn;
end.
Mein System: Windows7, Lazarus 4.99 (rev main_4_99-1688-g82df55c246) FPC 3.2.2 x86_64-win64-win32/win64