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.
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));
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:
[{},{}]