Difference between revisions of "User:Nhollm"

From Lazarus wiki
Jump to navigationJump to search
Line 36: Line 36:
 
MyDictionary.AddOrSetValue('Key1', 'Value1');
 
MyDictionary.AddOrSetValue('Key1', 'Value1');
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
There is the Function '''Add'''. But AddOrSetValue is recommended. Add will throw an error if the Key already exists. 'Dublicate Not Allowed in Dictionary' and will not overwrite the value.<br>
 +
  
 
===Remove===
 
===Remove===
Line 51: Line 54:
 
WriteLn(MyDictionary.Items['Key1']);
 
WriteLn(MyDictionary.Items['Key1']);
 
</syntaxhighlight>
 
</syntaxhighlight>
If the provided key does not exist, this will throw an Error :'Dictionary Key does not Exist'. You can use 'TryGetValue' instead.
+
If the provided key does not exist, this will throw an Error: 'Dictionary Key does not Exist'. You can use 'TryGetValue' instead.
  
 
===Item Count===
 
===Item Count===
Line 96: Line 99:
  
 
===Trying===
 
===Trying===
 +
If you want to get a feedback when adding/getting/setting, then use these functions. They return a boolean.<br>
 +
True if sucessfull, False if not. No Error is thrown, so they are a good alternative to GetValue or Add.
  
 
====TryAdd====
 
====TryAdd====
TryAdd returns True if added successfully, False otherwise.
+
TryAdd returns True if added successfully, False otherwise.
 
<syntaxhighlight lang="pascal">
 
<syntaxhighlight lang="pascal">
writeln('TryAdd: ' + BoolToStr(MyDictionary.TryAdd('Key2',TestClass ),'True', 'False'));
+
if MyDictionary.TryAdd('Key','TestValue') then
 +
  writeln('added successfully')
 +
else
 +
  writeln('not sucessfull');
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
====TryGetValue====
 
====TryGetValue====
 
TryGetValue takes two Arguments ->(key, value) and returns a '''boolean'''.<br>
 
TryGetValue takes two Arguments ->(key, value) and returns a '''boolean'''.<br>
If found, it returns '''true''' and the provided 'value' variable becomes the value of the searched KeyValuePair.<br>
+
If found, it returns '''True''' and the provided 'value' variable becomes the value of the searched KeyValuePair.<br>
If not found,the function returns '''False''' and the provided 'value'-variable is '''nil''' (or whatever value the variable had before the function call).
+
If not found,the function returns '''False''' and the provided 'value'-variable is '''Nil''' (or whatever value the variable had before the function call).
  
 
<syntaxhighlight lang="pascal">
 
<syntaxhighlight lang="pascal">
 
writeln(BoolToStr(MyDictionary.TryGetValue('Key', SearchedValue)));
 
writeln(BoolToStr(MyDictionary.TryGetValue('Key', SearchedValue)));
 
if MyDictionary.TryGetValue('Key', SearchedValue) then
 
if MyDictionary.TryGetValue('Key', SearchedValue) then
   writeln('Key found. Its Value is ' + SearchedValue)
+
   WriteLn('Key found. Its value is: ' + SearchedValue)
 
else
 
else
   if SearchedValue = Nil then
+
   WriteLn('Could not get value');
    writeln('the provided Value is Nil now');
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  

Revision as of 02:30, 13 May 2023

Warning-icon.png

Warning: All of this is subject to change. Do NOT use it until its finished. thx

Basic syntax

{$mode objfpc}
program Example;

uses
Generics.Collections;  //import the generics-library of the RTL

type
TStringStringDictionary =  specialize TDictionary<string, string>; //specialize a new dictionary and set the desired data-type of key and value

var
  MyDictionary : TStringStringDictionary;
begin
  MyDictionary := TStringStringDictionary.Create;
  try
    //do stuff with your dictionary..
  finally
    MyDictionary.Free;
  end;
end.

Usage:

Add

Add Entry or update its current value (key, value)

MyDictionary.AddOrSetValue('Key1', 'Value1');

There is the Function Add. But AddOrSetValue is recommended. Add will throw an error if the Key already exists. 'Dublicate Not Allowed in Dictionary' and will not overwrite the value.


Remove

MyDictionary.Remove('Key2');

If the Key does not exist, no Error is thrown.

Clear

MyDictionary.Clear;

Get Value

WriteLn(MyDictionary.Items['Key1']);

If the provided key does not exist, this will throw an Error: 'Dictionary Key does not Exist'. You can use 'TryGetValue' instead.

Item Count

Total number of Items in dictionary (count)

WriteLn('Items in Dictionary: ' + IntToStr(MyDictionary.Count));

Loops

//Loop Keys
for KeyStr in MyDictionary.Keys do
  WriteLn('Found key:' + KeyStr);


//Loop Values
for ValueStr in MyDictionary.Values do
  WriteLn('Found Value: ' + ValueStr);


//Loop Key-Value-Pairs
//var KeyValuePair : TStringStringDictionary.TDictionaryPair;
for KeyValuePair in MyDictionary do
  WriteLn('Found a Pair: Key:' + KeyValuePair.Key + ' Value:' + KeyValuePair.Value);

Check If Key/Value Exists

//Check if Key exists
if MyDictionary.ContainsKey('Key1') then
  WriteLn('key exists')
else
  WriteLn('key not found');


//Check if Value exists
if MyDictionary.ContainsValue("Searched value") then
  writeln('value exists')
else
  writeln('value not found');


Trying

If you want to get a feedback when adding/getting/setting, then use these functions. They return a boolean.
True if sucessfull, False if not. No Error is thrown, so they are a good alternative to GetValue or Add.

TryAdd

TryAdd returns True if added successfully, False otherwise.

if MyDictionary.TryAdd('Key','TestValue') then
  writeln('added successfully')
else
  writeln('not sucessfull');

TryGetValue

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 (or whatever value the variable had before the function call).

writeln(BoolToStr(MyDictionary.TryGetValue('Key', SearchedValue)));
if MyDictionary.TryGetValue('Key', SearchedValue) then
  WriteLn('Key found. Its value is: ' + SearchedValue)
else
  WriteLn('Could not get value');



Source Code

{$mode objfpc}

program Example;

uses
Generics.Collections  //import the generics-library of the RTL

type

TStringStringDictionary =  specialize TDictionary<string, string>; //specialize a new dictionary and set the data-type of key and value

var
  MyDictionary : TStringStringDictionary;
  TestClass : TmyCoolClass;
  //
  KeyString: string;
  KeyValuePair : TStringStringDictionary.TDictionaryPair;
  SearchedValue : string;
begin

   //create the dictionary
   MyDictionary := TStringStringDictionary.Create;

   //Add Element or update its value to new (key, value)
   MyDictionary.AddOrSetValue('Key1', 'Value1');

   //Remove Element
   MyDictionary.AddOrSetValue('Key2', 'Another Value');
   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 ValueStr in MyDictionary.Values do
        writeln('Found Value:' + ValueStr);


   //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');


   readln() //for Windows-console-users
end.