Overview

Dynamic Arrays

Demonstrates sophisticated management of dynamic arrays containing records. This example showcases custom sorting logic using lambda comparators, array removal operations, and extracting subsets using slicing techniques for task management scenarios.

Source Code

type
  TTask = record
    ID: Integer;
    Name: String;
    Priority: Integer;
  end;

var tasks: array of TTask;

procedure AddTask(id: Integer; name: String; priority: Integer);
begin
  var t: TTask;
  t.ID := id; t.Name := name; t.Priority := priority;
  tasks.Add(t);
end;

// Populate list
AddTask(1, 'Fix Compiler Bug', 10);
AddTask(2, 'Update Documentation', 5);
AddTask(3, 'Release Version 1.0', 20);
AddTask(4, 'Refactor Parser', 8);

PrintLn('Initial Tasks:');
for var t in tasks do
     PrintLn(Format(
       '  #%d: %-20s (Priority: %d)',
       [ t.ID, t.Name, t.Priority ]
     ));
// Sort by Priority (High to Low) using lambda
tasks.Sort(lambda (a, b) => b.Priority - a.Priority);

PrintLn(#13#10 + 'Tasks Sorted by Priority:');
for var t in tasks do
     PrintLn(Format(
       '  #%d: %-20s (Priority: %d)',
       [ t.ID, t.Name, t.Priority ]
     ));
// Find and remove a specific task
var indexToRemove := -1;
for var i := 0 to tasks.High do
  if tasks[i].ID = 2 then begin
    indexToRemove := i;
    break;
  end;

if indexToRemove >= 0 then begin
  PrintLn(#13#10 + 'Removing task: ' + tasks[indexToRemove].Name);
  tasks.Delete(indexToRemove);
end;

// Slicing: Get the top 2 urgent tasks
var urgent := tasks.Copy(0, 2);
PrintLn(#13#10 + 'Top 2 Urgent Tasks:');
PrintLn(JSON.Stringify(urgent));

Result

Initial Tasks:
  #1: Fix Compiler Bug     (Priority: 10)
  #2: Update Documentation (Priority: 5)
  #3: Release Version 1.0  (Priority: 20)
  #4: Refactor Parser      (Priority: 8)

Tasks Sorted by Priority:
  #3: Release Version 1.0  (Priority: 20)
  #1: Fix Compiler Bug     (Priority: 10)
  #4: Refactor Parser      (Priority: 8)
  #2: Update Documentation (Priority: 5)

Removing task: Update Documentation

Top 2 Urgent Tasks:
[{},{}]
On this page