Maybe this could help. Uses 2 Tmaps and a list defined in the User Type Scope (nicely encapsulated)
Basically creates 2 TMAPS.
1 to get name from a supplied email,
another to get an Email address from a supplied name.
Type User
Global usersList:TList = New TList
Global Name2Email:Tmap = CreateMap()
Global Email2Name:Tmap = CreateMap()
Field Name:String
Field Email:String
Function Create(name$,email$)
Local newperson:User = New User
newperson.Name = name
newperson.email = email
ListAddLast user.userslist , newperson
MapInsert (user.Name2Email , newperson.Name , newperson ) ' < value is the USER
MapInsert (user.Email2Name , newperson.Email , newperson )
Print "added "+newperson.Name+" "+newperson.email
End Function
Function Getname:String(email:String)
this_User:Object = MapValueForKey(User.Email2Name , email)
If this_User
Return User(this_user).name
Else
Return "Could Not Find Name, Check your spelling and Caps"
EndIf
End Function
Function GetEmail:String(name:String)
this_User:Object = MapValueForKey(User.Name2Email , name)
If this_User
Return User(this_User).Email
Else
Return "Could Not Find EMAIL, Check your spelling and Caps"
EndIf
End Function
End Type
Function CreateUser(n$ , e$)
User.Create(n$ , e$)
End Function
Function GetUserEmail:String(nm$)
Return User.getEmail(nm$)
End Function
Function GetUserName:String(em$)
Return User.getName(em$)
End Function
Print "~n~n~nAdding Users"
CreateUser("John","John@...")
CreateUser("Jim","Jim@...")
CreateUser("Sue","Sue@...")
Repeat
Print ; Print
mailQuery$ = Input$("Enter a name to get email address=>")
Print mailQuery$+" retrieved: "+GetUserEmail(mailQuery)
Print ; Print
nameQuery$ = Input$("Enter an email to get NAME=>")
Print nameQuery$+" retrieved: "+GetUserName(nameQuery)
Until AppTerminate()