Difference between revisions of "User:Nhollm"

From Lazarus wiki
Jump to navigationJump to search
Line 96: Line 96:
  
 
===Trying===
 
===Trying===
 +
 +
====TryAdd====
 +
TryAdd  returns True if added successfully, False otherwise.
 +
<syntaxhighlight lang="pascal">
 +
writeln('TryAdd: ' + BoolToStr(MyDictionary.TryAdd('Key2',TestClass ),'True', 'False'));
 +
</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'''.
+
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.Name )
+
   writeln('Key found. Its Value is ' + SearchedValue)
 
else
 
else
 
   if SearchedValue = Nil then
 
   if SearchedValue = Nil then
 
     writeln('the provided Value is Nil now');
 
     writeln('the provided Value is Nil now');
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
 +
  
 
==Source Code==
 
==Source Code==

Revision as of 01:46, 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');

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

TryAdd

TryAdd returns True if added successfully, False otherwise.

writeln('TryAdd: ' + BoolToStr(MyDictionary.TryAdd('Key2',TestClass ),'True', 'False'));

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
  if SearchedValue = Nil then
    writeln('the provided Value is Nil now');



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.