Managing a dynamic task list
// 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));
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:
[{},{}]