InterfacedLists.dpr 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. program InterfacedLists;
  2. {$APPTYPE CONSOLE}
  3. {$R *.res}
  4. uses
  5. System.SysUtils,
  6. Quick.Commons,
  7. Quick.Console,
  8. System.Generics.Collections,
  9. Quick.Collections,
  10. Quick.Linq;
  11. type
  12. TUser = class
  13. private
  14. fName : string;
  15. fAge : Integer;
  16. fRoles : TArray<string>;
  17. fRoles2 : IList<string>;
  18. public
  19. constructor Create(const aName : string; aAge : Integer; aRoles : TArray<string>);
  20. property Name : string read fName write fName;
  21. property Age : Integer read fAge write fAge;
  22. property Roles : TArray<string> read fRoles write fRoles;
  23. property Roles2 : IList<string> read fRoles2 write fRoles2;
  24. end;
  25. var
  26. List : IList<string>;
  27. ListObj : IObjectList<TUser>;
  28. myarray : TArray<string>;
  29. user : TUser;
  30. name : string;
  31. { TMyItem }
  32. constructor TUser.Create(const aName : string; aAge : Integer; aRoles : TArray<string>);
  33. begin
  34. fName := aName;
  35. fAge := aAge;
  36. fRoles := aRoles;
  37. fRoles2 := TXList<string>.Create;
  38. fRoles2.AddRange(aRoles);
  39. end;
  40. begin
  41. try
  42. ReportMemoryLeaksOnShutdown := True;
  43. //add values
  44. myarray := ['Joe','Mat','Lee'];
  45. //search for regex match
  46. cout('Search for regex match',ccYellow);
  47. for name in myarray.Where('e$',True).Select do
  48. begin
  49. cout('User %s ends with "e"',[name],etInfo);
  50. end;
  51. //add values to list
  52. List := TXList<string>.Create;
  53. List.Add('Joe');
  54. List.Add('Mat');
  55. List.Add('Lee');
  56. //get from index
  57. cout('User is %s',[List[2]],etInfo);
  58. //search for regex match
  59. cout('Search for regex match',ccYellow);
  60. for name in List.Where('e$',True).Select do
  61. begin
  62. cout('User %s ends with "e"',[name],etInfo);
  63. end;
  64. //add values to objectlist
  65. ListObj := TXObjectList<TUser>.Create;
  66. ListObj.Add(TUser.Create('Joe',22,['LocalAdmin']));
  67. ListObj.Add(TUser.Create('Mat',30,['SuperAdmin','DomainAdmin']));
  68. ListObj.Add(TUser.Create('Lee',40,['User']));
  69. //search for a object property
  70. cout('Search for a object property match with WhereClause',ccYellow);
  71. user := ListObj.Where('Name = ?',['Lee']).SelectFirst;
  72. if user <> nil then cout('%s is %d years old',[user.Name,user.Age],etInfo);
  73. //search with predicate
  74. cout('Search for a property match with Predicate',ccYellow);
  75. user := ListObj.Where(function(aUser : TUser) : Boolean
  76. begin
  77. Result := aUser.Name.StartsWith('J');
  78. end).SelectFirst;
  79. if user <> nil then cout('%s starts with J letter',[user.Name],etInfo);
  80. //search into a array property
  81. cout('Search into a array property',ccYellow);
  82. user := ListObj.Where('Roles2 CONTAINS ?',['SuperAdmin']).SelectFirst;
  83. if user <> nil then cout('%s is %s',[user.Name,CommaText(user.Roles)],etInfo);
  84. cout('Press ENTER to Exit',ccYellow);
  85. ConsoleWaitForEnterKey;
  86. except
  87. on E: Exception do
  88. Writeln(E.ClassName, ': ', E.Message);
  89. end;
  90. end.