‒ Valores asociados a objetos.

Los valores asociados, no solamente pueden ser pares nombre-valor, también pueden ser objetos asociados a una cadena de caracteres de la lista. Esto se puede hacer con el método AddObject, en donde el primer parámetro es la cadena de caracteres que vamos añadir a la lista, y el segundo parámetro el objeto asociado a la cadena de caracteres. Para recuperar el objeto asociado a un elemento de la lista de caracteres se usa la propiedad Objects, si el elemento de la lista no tiene un objeto o instancia asociado este devolverá nil. Esto es importante ya que un TStringList puede estar compuesta de cadenas de caracteres asociados con objetos o sin ningún objeto.


Descargar
{$codepage utf8}
{$mode objfpc}
Uses sysutils, classes
{$ifdef Linux},cwstring{$endif};
Type TEntero=class
       n:integer;
     End;

Var ListaCadenas:TStringList;
    i:integer;
    m:TEntero;
Begin

  ListaCadenas:=TStringList.create;
  for i:=0 to 10 do
   Begin
      m:=TEntero.create;
      m.n:=i;
      ListaCadenas.AddObject('Var-'+intToStr(i),m);
   End;

  ListaCadenas.Add('Una cadena de caracteres simple');

  for i:=11 to 15 do
   Begin
      m:=TEntero.create;
      m.n:=i;
      ListaCadenas.AddObject('Var-'+intToStr(i),m);
   End;

  for i:=0 to ListaCadenas.Count-1 do
    Begin
      m:=TEntero(ListaCadenas.Objects[i]);
      if m<>nil then
         Writeln(ListaCadenas[i],' ',m.n)
      else Writeln(ListaCadenas[i])
    End;
End.
Código fuente 19: Uso de valores asociados a objetos.
Descargar

El método AddObject permite añadir objetos asociados a la lista, pero este no nos permite insertarlo en una posición determinado, para ello usamos el método insertObject. Este método tiene como primer parámetro la posición en donde se ha de insertar la cadena de caracteres, el segundo parámetro la cadena de caracteres y él último el objeto asociado a la cadena de caracteres.


Descargar
{$codepage utf8}
{$mode objfpc}
Uses sysutils, classes
{$ifdef Linux},cwstring{$endif};
Type TEntero=class
       n:integer;
     End;

Var ListaCadenas:TStringList;
    i:integer;
    m:TEntero;
Begin

  ListaCadenas:=TStringList.create;
  for i:=0 to 10 do
   Begin
      m:=TEntero.create;
      m.n:=i;
      ListaCadenas.AddObject('Var-'+intToStr(i),m);
   End;

  ListaCadenas.Add('Una cadena de caracteres simple');

  for i:=11 to 15 do
   Begin
      m:=TEntero.create;
      m.n:=i;
      ListaCadenas.AddObject('Var-'+intToStr(i),m);
   End;

  m:=TEntero.create;
  m.n:=58;
  ListaCadenas.InsertObject(5,'Algo diferente',m);


  for i:=0 to ListaCadenas.Count-1 do
    Begin
      m:=TEntero(ListaCadenas.Objects[i]);
      if m<>nil then
         Writeln(ListaCadenas[i],' ',m.n)
      else Writeln(ListaCadenas[i])
    End;

End.
Código fuente 20: Uso de valores asociados a objetos con insertObject.
Descargar