41 lines
1.4 KiB
Text
41 lines
1.4 KiB
Text
Module Checkit {
|
|
Function MakeHash(&a$(), &b$()) {
|
|
if dimension(a$())<>1 or dimension(b$())<>1 then Error "Only for one dimension arrays"
|
|
if len(a$())<>len(b$()) Then Error "Only for same size arrays"
|
|
start=dimension(a$(),1, 0)
|
|
end=dimension(a$(),1, 1)
|
|
start2=dimension(b$(),1, 0)
|
|
Inventory Hash
|
|
For i=start to end {
|
|
if Exist(hash, a$(i)) Then {
|
|
\\ s is a pointer to a stack object
|
|
s=hash(a$(i))
|
|
Stack s {Data i-start+start2}
|
|
} Else Append hash, a$(i):=Stack:=i-start+start2
|
|
}
|
|
=Hash
|
|
}
|
|
|
|
Module PrintKeyItems (hash, akey$, &b$()) {
|
|
\\ n=hash(akey$) ' use this if akey$ allways is a proper key
|
|
\\ and hide these two lines using \\
|
|
if not exist(hash, akey$) then Error "Key not exist"
|
|
n=Eval(hash)
|
|
For i=1 to Len(n) {
|
|
Print b$(stackitem(n,i)),
|
|
}
|
|
Print
|
|
}
|
|
|
|
Dim a$(2 to 5)
|
|
Dim b$(4 to 7)
|
|
a$(2)="A", "B","A","C"
|
|
b$(4)="A1","B1","A2", "C1"
|
|
|
|
MyHash=MakeHash(&a$(), &b$())
|
|
|
|
PrintkeyItems Myhash, "A", &b$() ' print A1 A2
|
|
PrintkeyItems Myhash, "B", &b$() ' print B1
|
|
PrintkeyItems Myhash, "C", &b$() ' print C1
|
|
}
|
|
Checkit
|