[fpc-pascal]How to get the values stored in a set

memsom at interalpha.co.uk memsom at interalpha.co.uk
Tue Dec 3 11:47:39 CET 2002

> I'd like to know how to get the values of a set.
> For example:
> Type TSet = set of 1..50;
> Var Test:TSet;
> begin
>      Test:=[12,25,15]; //set with some alleatory values
>      ?? //How can i know that this set has 3 itens and the itens are 12, 
> 25 and 15?
> end;

Test:=[12, 25, 15, 24, 30, 10, 18, 6]; 

// member operator 'in'
// A is a member of [B]
if (12 in Test) then begin
  //you got 12...

//subset operator '<='
// [A] is a subset of [B] ([B] contains [A])
if ([12, 25, 15] <= Test) then begin
  //12, 25, and 15 are in the set...

//superset operator '>='
// [B] is a superset of [A]
// ([B] contains (amoungst others) the contents of [A])
if (Test >= [12, 25, 15]) then begin
  //Test contains 12, 25, 15, amoungst others..

Please note theat in my explanations I use '[]' where the variable must be a 
set (or a set variable) and no '[]' where is must be a variable of the type the 
set contains. I don't know of is simple way to work out the count, though you 
could write a routine to do this yourself:

function TSetCount(x: TSet): word;
  TSetBounds = 1..50;
  i: TSetBounds;
  Result := 0;
  for i := low(TSetBounds) to high (TSetBounds) do begin
    if i in x then inc(result);

However, this will not tell you what the contents is. 

Hope that helps,


This message was sent using Mistral WebMail.

More information about the fpc-pascal mailing list