Overview

Advanced dynamic array operations

Managing a dynamic task list

Source Code

// Advanced dynamic array operations: Managing a dynamic task list
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