// Generic types for FreeSparta.com and FreePascal! // by Maciej Izak (hnb), 2014 program THashMapCaseInsensitive; {$MODE DELPHI} {$APPTYPE CONSOLE} uses Generics.Collections, Generics.Defaults; var StringMap: THashMap; AnsiStringMap: THashMap; UnicodeStringMap: THashMap; AdvancedHashMapWithBigLoadFactor: TCuckooD6; k: String; begin WriteLn('Working with case insensitive THashMap'); WriteLn; // example constructors for different string types StringMap := THashMap.Create(TIStringComparer.Ordinal); StringMap.Free; AnsiStringMap := THashMap.Create(TIAnsiStringComparer.Ordinal); AnsiStringMap.Free; UnicodeStringMap := THashMap.Create(TIUnicodeStringComparer.Ordinal); UnicodeStringMap.Free; // standard TI*Comparer is dedicated for MAX_HASHLIST_COUNT = 4 and lower. For example DArrayCuckoo where D = 6 // we need to create extra specialized TGIStringComparer type AdvancedHashMapWithBigLoadFactor := TCuckooD6.Create( TGIStringComparer.Ordinal); AdvancedHashMapWithBigLoadFactor.Free; // ok lets start // another way to create case insensitive hash map StringMap := THashMap.Create(TGIStringComparer.Ordinal); WriteLn('Add Cat and Dog'); StringMap.Add('Cat', EmptyRecord); StringMap.Add('Dog', EmptyRecord); // WriteLn('Contains CAT = ', StringMap.ContainsKey('CAT')); WriteLn('Contains dOG = ', StringMap.ContainsKey('dOG')); WriteLn('Contains Fox = ', StringMap.ContainsKey('Fox')); WriteLn('Enumerate all keys :'); for k in StringMap.Keys do WriteLn(' > ', k); ReadLn; StringMap.Free; end.