Fórum Set of - Conjunto #290678
03/08/2005
0
type
TUniverso = (a, b, c, d, e, f);
TConjunto = set of TUniverso;
var
Conj: TConjunto;
begin
Conj := [d, b, f];
if (a in Conj) then ShowMessage(´a´);
if (b in Conj) then ShowMessage(´b´);
if (c in Conj) then ShowMessage(´c´);
if (d in Conj) then ShowMessage(´d´);
if (e in Conj) then ShowMessage(´e´);
if (f in Conj) then ShowMessage(´f´);
end;
voces devem concodar comigo q essa é uma maneira meia ´burra´ de se fazer isso, pois se o meu universo for um pouco maior a coisa vai complicar.
alguem sabe alguma maneira de saber os items da enumeracao q existem dentro do conjunto??
tipo um for, um while... quanquer coisa... o q eu preciso eh ´percorrer´ o conjunto.
Night_man
Curtir tópico
+ 0Posts
03/08/2005
Michael
As únicas funções de manipulação de conjuntos que eu conheço no Delphi são [b:45bde2e4e7]Include [/b:45bde2e4e7]e [b:45bde2e4e7]Exclude[/b:45bde2e4e7], que servem para incluir ou excluir um elemento, respectivamente. É uma saída para não ter q usar [i:45bde2e4e7]Conjunto := Conjunto + [Elemento].[/i:45bde2e4e7]
Mas, sets não existem para armazenar grandes quantidades de elementos. Portanto, eu aconselho vc usar uma array - estática ou dinâmica, dependendo da sua aplicação - pois a flexibilidade de manipulação é bem maior.
Em arrays vc pode fazer um loop por todos os seus itens.
[]´s
Gostei + 0
03/08/2005
Massuda
type TUniverso = (a, b, c, d, e, f); TConjunto = set of TUniverso; var I: TUniverso; Conj: TConjunto; begin Conj := [d, b, f]; for I := Low(I) to High(I) do begin if I in Conj then begin // trata o caso de I estar no conjunto end; end; ...
Gostei + 0
03/08/2005
Michael
Não sabia q se podia tratar Sets desta forma. Vivendo e aprendendo... ;-)
[]´s
Gostei + 0
03/08/2005
Night_man
estou usando ateh o ssuc e o pred tipo
Atual := a;
while (Atual <> d) do
Atual := Succ(Atual)
o problema eh o seguinte... o meu universo tem 200 items....
e nao estava a fim de testar ver se cada um deles esta no conjunto... eh perda de tempo... pois no maximo vao existir uns 5 deles...
logo queria pegar apenas esses 5....
Gostei + 0
04/08/2005
Beppe
Mas se a distribuição for esparsa, a operação que deseja pode ser lenta. Há várias estruturas de dados para implementar SETS, entre elas mapa de bits(os sets no Delphi), arrays, listas encadeadas, hashtables, cada um com pontos fortes e fracos. Uma operação que for rápida em uma, pode ser lenta em outra, e vice-versa.
Por isso, verifique se há a real necessidade de mudar seu código(otimização antecipada é a raiz de todo mal). Duzentos é um universo pequeno, só será problema se a operação for repetida várias vezes em curto espaço de tempo.
Se eu quisesse uma iteração rápida, usaria um array não-ordenado apenas com os ítems inclusos. Se quisesse um teste MEMBRO-DE eficiente, usuria em conjunção com um mapa de bits. Neste caso, duas estruturas reduntantes seriam usadas, apenas para obter a melhor performance.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)