[fpc-pascal] Pascals unit for associate arrays?

Paul Nicholls paulfnicholls at gmail.com
Tue Sep 11 05:55:30 CEST 2007


----- Original Message ----- 
From: "Francisco Reyes" <lists at stringsutils.com>
To: "FreePascal list" <fpc-pascal at lists.freepascal.org>
Sent: Tuesday, September 11, 2007 1:38 PM
Subject: [fpc-pascal] Pascals unit for associate arrays?


> Is there any unit, or built in functionality, to do the equivalent of 
> perl's associate arrays or Python's dictionaries?
>
>
> What I am trying todo is to parse some lines and to store ocurrences of 
> certain strings.
>
> For example
> string1
> string2
> string1
> string3
> string2
>
> What I want to do is to create an entry string1 and count all string1 one 
> ocurrences, the same for each different string. In the end I would have
> string1 2
> string2 2
> string3 1
>
>

I don't know about buil-in associative arrays or similar, but for starters 
you could use a TStringList to do a similar thing (email typed and 
untested):

Procedure AddStringToList(AList: TStringList; AString: String);
Var
    Index : Integer;
    Value : Integer;
Begin
    If Not AList.Find(AString,Index) Then
        AList.AddObject(AString,Pointer(1))
    Else
    Begin
        Value := Integer(AList.Objects[Index]);
        Inc(Value);
        AList.Objects[Index] := Pointer(Value);
    End;
End;

Function GetStringCount(AList: TStringList; AString: String): Integer;
Var
    Index : Integer;
Begin
    Result := 0;
    If Not AList.Find(AString,Index) Then Exit;
    Result := Integer(AList.Objects[Index]);
End;

MyList := TStringList.Create;
MyList.Sorted := True;

AddStringToList(MyList,'string1');
AddStringToList(MyList,'string2');
AddStringToList(MyList,'string1');
AddStringToList(MyList,'string3');
AddStringToList(MyList,'string2');

WriteLn('string1 ',GetStringCount(MyList,'string1'));
WriteLn('string2 ',GetStringCount(MyList,'string2'));
WriteLn('string3 ',GetStringCount(MyList,'string3'));

Should output

string1 2
string2 2
string3 1

Hope this helps,
cheers,
Paul




More information about the fpc-pascal mailing list