thashmapcaseinsensitive.lpr 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // Generic types for NewPascal.org and FPC!
  2. // by Maciej Izak (hnb), 2014
  3. program THashMapCaseInsensitive;
  4. {$MODE DELPHI}
  5. {$APPTYPE CONSOLE}
  6. uses
  7. Generics.Collections, Generics.Defaults;
  8. var
  9. StringMap: THashMap<String, TEmptyRecord>;
  10. AnsiStringMap: THashMap<AnsiString, TEmptyRecord>;
  11. UnicodeStringMap: THashMap<UnicodeString, TEmptyRecord>;
  12. AdvancedHashMapWithBigLoadFactor: TCuckooD6<RawByteString, TEmptyRecord>;
  13. k: String;
  14. begin
  15. WriteLn('Working with case insensitive THashMap');
  16. WriteLn;
  17. // example constructors for different string types
  18. StringMap := THashMap<String, TEmptyRecord>.Create(TIStringComparer.Ordinal);
  19. StringMap.Free;
  20. AnsiStringMap := THashMap<AnsiString, TEmptyRecord>.Create(TIAnsiStringComparer.Ordinal);
  21. AnsiStringMap.Free;
  22. UnicodeStringMap := THashMap<UnicodeString, TEmptyRecord>.Create(TIUnicodeStringComparer.Ordinal);
  23. UnicodeStringMap.Free;
  24. // standard TI*Comparer is dedicated for MAX_HASHLIST_COUNT = 4 and lower. For example DArrayCuckoo where D = 6
  25. // we need to create extra specialized TGIStringComparer type
  26. AdvancedHashMapWithBigLoadFactor := TCuckooD6<RawByteString, TEmptyRecord>.Create(
  27. TGIStringComparer<RawByteString, TDelphiSixfoldHashFactory>.Ordinal);
  28. AdvancedHashMapWithBigLoadFactor.Free;
  29. // ok lets start
  30. // another way to create case insensitive hash map
  31. StringMap := THashMap<String, TEmptyRecord>.Create(TGIStringComparer<String>.Ordinal);
  32. WriteLn('Add Cat and Dog');
  33. StringMap.Add('Cat', EmptyRecord);
  34. StringMap.Add('Dog', EmptyRecord);
  35. //
  36. WriteLn('Contains CAT = ', StringMap.ContainsKey('CAT'));
  37. WriteLn('Contains dOG = ', StringMap.ContainsKey('dOG'));
  38. WriteLn('Contains Fox = ', StringMap.ContainsKey('Fox'));
  39. WriteLn('Enumerate all keys :');
  40. for k in StringMap.Keys do
  41. WriteLn(' > ', k);
  42. ReadLn;
  43. StringMap.Free;
  44. end.