Set/fi

From Free Pascal wiki

Deutsch (de) English (en) suomi (fi) français (fr) русский (ru)

Joukko

Johdanto

Joukko (Set) koodaa monia arvoja luetelluista tyypeistä (enumeration) järjestyksen (ordinal) omaaviin tyyppeihin.

Tarkastellaan esimerkiksi tätä lueteltua tyyppiä:

  TSpeed = (spVerySlow,spSlow,spAVerage,spFast,spVeryFast);

Ja tämä joukko:

  TPossibleSpeeds = set of TSpeed;

TPossibleSpeedsin kiinteät vakiojoukot määritellään niin että annetaan hakasulkujen sisällä joukkoon kuuluvat alkiot:

  const
    RatherSlow = [spVerySlow,spSlow];
    RatherFast = [spFast,spVeryFast];

RatherSlow ja RatherFast ovat joitakin TSpeed:n osajoukkoja.

Joukkojen käsittely

Kaksi funktiota on määritelty RTL:n System unit joita käytetään joukkojen käsittelemiseen Include(ASet,AValue) ja Exclude(ASet,AValue).

  var
    SomeSpeeds: TPossibleSpeeds;
  begin
    SomeSpeeds := [];
    Include(SomeSpeeds,spVerySlow);
    Include(SomeSpeeds,spVeryFast);
  end;

Joukkoja ei voida suoraan käsitellä, jos ne on julkaistu. Vaan on yleensä tehtävä paikallinen kopio, muutokset paikalliskopioon ja kutsutaan asettaja.

  procedure TSomething.DoSomething(Sender: TFarObject);
  var
    LocalCopy: TPossibleSpeeds;
  begin
    LocalCopy := Sender.PossibleSpeeds; // getter to local
    Include(LocalCopy,spVerySlow);
    Sender.PossibleSpeeds := LocalCopy; // local to setter.
  end;

Varattuasanaa In käytetään testaukseen, onko arvo joukossa. Sitä käytetään esimerkiksi tällä tavalla:

  var
    CanBeSlow: Boolean;
  const
    SomeSpeeds = [Low(TSpeed)..High(TSpeed)];
  begin
    CanBeSlow := (spVerySlow in SomeSpeeds) or (spSlow in SomeSpeeds);
  end;

Bittimaskit

Joukkoja voidaan käyttää luomaan bittimaskeja kuten on esitetty esimerkissä.

(*
  FLAG_A = 1;  // 1 shl 0
  FLAG_B = 2;  // 1 shl 1
  FLAG_C = 4;  // 1 shl 2 
*)

type
  TFlag = (FLAG_A, FLAG_B, FLAG_C);
  TFlags = set of TFlag;

var
  Flags: TFlags;

[..]
  Flags:= [FLAG_A, FLAG_C];
  if FLAG_A in Flags then ..  // check FLAG_A is set in flags variable


Navikointipalkki: datatyypit
Yksinkertaiset datatyypit

boolean byte cardinal char currency extended int64 integer longint pointer real shortint smallint word

Monimutkaiset datatyypit

array class object record set string shortstring