Dúvida com Generics.Collection
Ola.
Minha dúvida é simples... como eu posso encontrar uma objeto meu com uma de suas propriedades tendo um determinado valor sendo este estar dentro de uma TList<MyObject>
Minha classe:
No meu form tenho a variável:
Tentei o pai google pra saber se o BinarySearch ajuda, mas não entendi como funciona.
Se eu tiver um valor de TMyClass com Name sendo "Teste" dentre outros... Como posso fazer uma busca (um locate, sei la) para me retornar o indice ou a minha classe da variável "MyClassList" ???
Aguardo.
Minha dúvida é simples... como eu posso encontrar uma objeto meu com uma de suas propriedades tendo um determinado valor sendo este estar dentro de uma TList<MyObject>
Minha classe:
TMyclass = Class(SaveSystem) //não liguem pro savesystem, meu objeto para salvar a classe com seus valores em arquivo.
private
FName: String;
FDamage: Integer;
public
property Name: String read FName write FName;
property Damage: Integer read FDamage write FDamage;
end;
No meu form tenho a variável:
MyClassList: TList<TMyClass>;
Tentei o pai google pra saber se o BinarySearch ajuda, mas não entendi como funciona.
Se eu tiver um valor de TMyClass com Name sendo "Teste" dentre outros... Como posso fazer uma busca (um locate, sei la) para me retornar o indice ou a minha classe da variável "MyClassList" ???
Aguardo.
Pjrm1470
Curtidas 0
Respostas
George Bonespírito
27/06/2011
Tenta isso:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Generics.Collections, StdCtrls;
type
TMeuObj=Class
private
aDamage: String;
aName: String;
public
property Name : String Read aName Write aName;
property Damage : String Read aDamage Write aDamage;
End;
type
TForm2 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
MinhaLista : TObjectList<TMeuObj>;
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
var
obj : TMeuObj;
I : Integer;
begin
MinhaLista := TObjectList<TMeuObj>.Create;
MinhaLista.OwnsObjects := True;
for I := 0 to 9 do
begin
obj := TMeuObj.Create;
obj.Name := IntToStr(I)+'NAME';
Obj.Damage := IntToStr(I);
MinhaLista.Add(obj);
end;
for I := 0 to pred(MinhaLista.Count) do
if MinhaLista.Items[I].Damage = '8' then
Memo1.Lines.Add(Format('My name is %s and my damage is %s',[MinhaLista.Items[I].Name, MinhaLista.Items[I].Damage]));
MinhaLista.Free;
end;
end.
GOSTEI 0
Pjrm1470
27/06/2011
Obrigado pela iniciativa.
Para uma aplicação com poucos registro é bem eficiente a solução, mas pra grande quantidade de registros, nunca fiz um teste de desempenho. Por isso comentei essa questão na comunidade DevMedia. Ja o tenho implementado, e a momento trabalho com poucos registros, mas a classe é para controle de um game que estou elaborando. Desempenho é crucial pra mim.
Agradeço a iniciativa. Se tiver mais ideias, estou aberto a ideias.
Abraço.
Para uma aplicação com poucos registro é bem eficiente a solução, mas pra grande quantidade de registros, nunca fiz um teste de desempenho. Por isso comentei essa questão na comunidade DevMedia. Ja o tenho implementado, e a momento trabalho com poucos registros, mas a classe é para controle de um game que estou elaborando. Desempenho é crucial pra mim.
Agradeço a iniciativa. Se tiver mais ideias, estou aberto a ideias.
Abraço.
GOSTEI 0