User:Nhollm
From Free Pascal wiki
Jump to navigationJump to search
{$mode objfpc}{$H+}{$J-}
program Example;
uses
Generics.Collections, sysutils,
ObjectDictionary; //import the generics-library of the RTL
type
TmyCoolClass = class
Name: String;
end;
TStringClassDictionary = specialize TDictionary<string, TmyCoolClass>; //specialize a new dictionary and set the data-type of key and value
TStringStringDictionary = specialize TDictionary<string, string>;
var
MyDictionary : TStringClassDictionary;
TestClass : TmyCoolClass;
KeyString: string;
KeyValuePair : TStringClassDictionary.TDictionaryPair;
SearchedValue : TmyCoolClass;
begin
//create the dictionary
MyDictionary := TStringClassDictionary.Create;
TestClass := TmyCoolClass.Create;
TestClass.Name := 'Hi';
SearchedValue := TmyCoolClass.Create;
SearchedValue.Name := 'HIIII';
//Add Element or update its value to new (key, value)
MyDictionary.AddOrSetValue('Key1', TestClass);
//Remove Element
MyDictionary.AddOrSetValue('Key2', TestClass);
MyDictionary.Remove('Key2');
//Clear entire dictionary
//MyDictionary.Clear;
// Total number of Items in dictionary (count)
writeln('Items in Dictionary: ' + IntToStr(MyDictionary.Count));
//Get Value by Key
writeln(MyDictionary.Items['Key1'].Name); //If the provided key does not exist, this will throw a Error :'Dictionary Key does not Exist'
//----------------------Trying------------------
//TryAdd returns True if added successfully, False otherwise
writeln('TryAdd: ' + BoolToStr(MyDictionary.TryAdd('Key2',TestClass ),'True', 'False'));
//'TryGetValue'takes two Arguments ->(key, value) and returns a boolean.
//If found, it returns true and the provided 'value' variable becomes the value of the searched KeyValuePair
//if not found,the function returns False and the provided 'value'-variable is nil
writeln(BoolToStr(MyDictionary.TryGetValue('Key', SearchedValue)));
if MyDictionary.TryGetValue('Key', SearchedValue) then
writeln('Key found. Its Value is ' + SearchedValue.Name )
else
if SearchedValue = Nil then
writeln('the provided Value is Nil now');
//----------------------Loop through the Dictionary------------------
//Loop Keys
for KeyString in MyDictionary.Keys do
writeln('Found key:' + KeyString);
//Loop Values
for TestClass in MyDictionary.Values do
writeln('Found Value:' + TestClass.Name);
//Loop Key-Value-Pairs
for KeyValuePair in MyDictionary do
writeln('Found a Pair: Key:' + KeyValuePair.Key + ' Value:' + KeyValuePair.Value.Name);
//----------------------Check if exists in whole Dictionary------------------
//Check if Key exists
if MyDictionary.ContainsKey('Key1') then
writeln('key exists')
else
writeln('key not found');
//Check if Value exists
if MyDictionary.ContainsValue(TestClass) then
writeln('value exists')
else
writeln('value not found');
//Accessing Items by a Index is not possible, (like in Delphi)!
//Errors
//Events
//Miscelangeous
readln()
end.