55 lines
1.8 KiB
Plaintext
55 lines
1.8 KiB
Plaintext
# associative array merging #
|
|
|
|
# the modes allowed as associative array element values - change to suit #
|
|
MODE AAVALUE = UNION( STRING, INT, REAL );
|
|
# the modes allowed as associative array element keys - change to suit #
|
|
MODE AAKEY = STRING;
|
|
# initial value for an array element #
|
|
AAVALUE init element value = "";
|
|
|
|
# include the associative array code #
|
|
PR read "aArrayBase.a68" PR
|
|
|
|
# adds or replaces all elements from b into a #
|
|
PRIO UPDATE = 9;
|
|
OP UPDATE = ( REF AARRAY a, REF AARRAY b )REF AARRAY:
|
|
BEGIN
|
|
REF AAELEMENT e := FIRST b;
|
|
WHILE e ISNT nil element DO
|
|
a // key OF e := value OF e;
|
|
e := NEXT b
|
|
OD;
|
|
a
|
|
END # UPDATE # ;
|
|
|
|
BEGIN # tests #
|
|
# construct the associative arrays for the task #
|
|
REF AARRAY a := INIT LOC AARRAY;
|
|
REF AARRAY b := INIT LOC AARRAY;
|
|
a // "name" := "Rocket Skates";
|
|
a // "price" := 12.75;
|
|
a // "color" := "yellow";
|
|
b // "price" := 15.25;
|
|
b // "color" := "red";
|
|
b // "year" := 1974;
|
|
# merge the arrays #
|
|
REF AARRAY c := INIT LOC AARRAY;
|
|
c UPDATE a UPDATE b;
|
|
# show the merged array #
|
|
REF AAELEMENT e := FIRST c;
|
|
WHILE e ISNT nil element DO
|
|
print( ( key OF e
|
|
, ": "
|
|
, CASE value OF e
|
|
IN (STRING s): s
|
|
, (INT i): whole( i, 0 )
|
|
, (REAL r): fixed( r, -12, 2 )
|
|
OUT "????"
|
|
ESAC
|
|
, newline
|
|
)
|
|
);
|
|
e := NEXT c
|
|
OD
|
|
END
|