Ensembles

Les ensembles permettent de définir une collection de valeurs ordinales, non ordonnée, ne pouvant apparaître qu'une seule fois dans la collection.

Déclaration

Les types ensembles sont appliqués à un type énuméré:

type
   TMonEnsemble = set of TMonEnumere;

Si par exemple TMonEnumere est defini comme suit:

type
   TMonEnumere = (meRouge, meVert, meBleu);

Alors les seules valeurs possibles pour une variable de type TMonEnsemble sont:

  • ensemble vide: []
  • ensembles de un élément: [meRouge], [meVert] ou [meBleu]
  • ensembles de deux éléments: [meRouge, meVert], [meRouge, meBleu] ou [meVert, meBleu]
  • ensemble de trois éléments: [meRouge, meVert, meBleu]

Aucune autre valeur ne pourra être prise.

Manipulation des ensemble

Les variables et champs de type ensemble peuvent être manipulé avec les fonctions & pseudo-méthodes Include et Exclude.

  • Include ajoute un élément à un ensemble, et ne fait rien s'il est présent.
  • Exclude retire un élément d'un ensemble, et ne fait rien s'il est absent.
var e : TMonEnsemble; // e = []

Include(e, meRouge); // e vaut maintenant [meRouge]
e.Include(meVert); // e vaut maintenant [meRouge, meVert]
Include(e, meRouge); // meRouge déjà present, e vaut toujours [meRouge, meVert]

Exclude(e, meRouge); // e vaut maintenant [meVert]
e.Exclude(meVert); // e est désormais vide
e.Exclude(meBleu); // sans effet car meBleu n'est pas présent

Opérateurs

L'opérateur in et sa négation not in permettent de tester la présence d'un valeur au sein d'un ensemble.

var e : TMonEnsemble := [meBleu];

if meBleu in e then
   PrintLn("meBleu est dans e");
if meRouge not in e then
   PrintLn("meRouge n'est pas dans e");

Les opérateurs arithmétiques suivants sont supportés (Qubes 7.2):

  • + indique une union ensembliste
  • - dénote une soustraction ensembliste
  • * permet de spécifier une intersection ensembliste

Les opérateurs de comparaison supportés sont (Qubes 7.2):

  • = pour l'égalité
  • <> pour la différence
  • >= sera vrai si l'ensemble de gauche contient celui de droite
  • <= sera vrai si l'ensemble de droite contient celui de gauche

Itération

Il est possible d'utiliser for in pour itérer sur tous les éléments d'un ensemble:

var e : TMonEnsemble := [meRouge, meBlue];

for var i in e do
   PrinLn(i.Name);

imprimera

meRouge
meBleu