[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