Wiki-kopiopeilipalvelin

Tämä on pascal.chatin wikin peilipalvelin. Muokkaus, historia ja kirjautuminen ovat siellä.

Set/fi

Deutsch · English · Français · Suomi · Русский

Johdanto

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

Tarkastellaan esimerkiksi tätä lueteltua tyyppiä:

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

Ja tämä joukko:

pascal
  TPossibleSpeeds = set of TSpeed;

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

pascal
  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).

pascal
  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.

pascal
  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;

Varattua sanaa in käytetään testaukseen, onko arvo joukossa. Sitä käytetään esimerkiksi tällä tavalla:

pascal
  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ä.

pascal
(*
  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

From the Free Pascal wiki, page "Set/fi", as it stood on 2019-11-16 after a change by Djzepi, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Versio 1, viimeksi muokannut WikiArchive .