70 lines
1.6 KiB
Ada
70 lines
1.6 KiB
Ada
with Ada.Text_Io;
|
|
with Ada.Containers.Indefinite_Ordered_Maps;
|
|
|
|
procedure Merge_Maps is
|
|
use Ada.Text_Io;
|
|
|
|
type Key_Type is new String;
|
|
type Value_Type is new String;
|
|
|
|
package Maps is
|
|
new Ada.Containers.Indefinite_Ordered_Maps (Key_Type => Key_Type,
|
|
Element_Type => Value_Type);
|
|
use Maps;
|
|
|
|
function Merge (Original : Map; Update : Map) return Map is
|
|
Result : Map := Original;
|
|
Cur : Cursor := Update.First;
|
|
begin
|
|
while Has_Element (Cur) loop
|
|
if Original.Contains (Key (Cur)) then
|
|
Result.Replace_Element (Result.Find (Key (Cur)),
|
|
Element (Cur));
|
|
else
|
|
Result.Insert (Key (Cur), Element (Cur));
|
|
end if;
|
|
Next (Cur);
|
|
end loop;
|
|
return Result;
|
|
end Merge;
|
|
|
|
procedure Put_Map (M : Map) is
|
|
Cur : Cursor := M.First;
|
|
begin
|
|
while Has_Element (Cur) loop
|
|
Put (String (Key (Cur)));
|
|
Set_Col (12);
|
|
Put (String (Element (Cur)));
|
|
New_Line;
|
|
Next (Cur);
|
|
end loop;
|
|
end Put_Map;
|
|
|
|
Original : Map;
|
|
Update : Map;
|
|
Result : Map;
|
|
begin
|
|
Original.Insert ("name", "Rocket Skates");
|
|
Original.Insert ("price", "12.75");
|
|
Original.Insert ("color", "yellow");
|
|
|
|
Update.Insert ("price", "15.25");
|
|
Update.Insert ("color", "red");
|
|
Update.Insert ("year", "1974");
|
|
|
|
Result := Merge (Original, Update);
|
|
|
|
Put_Line ("Original:");
|
|
Put_Map (Original);
|
|
New_Line;
|
|
|
|
Put_Line ("Update:");
|
|
Put_Map (Update);
|
|
New_Line;
|
|
|
|
Put_Line ("Result of merge:");
|
|
Put_Map (Result);
|
|
New_Line;
|
|
|
|
end Merge_Maps;
|