IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Intersection de deux ensembles de chaînes


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 478
    Par défaut Intersection de deux ensembles de chaînes
    Bonjour,
    Je cherche à utiliser les fonctions + et * sur des set of mais le set of string n'existe pas.
    Cette possibilité existe bien dans python.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    a = [1,2,3,4,"B"]
    b = [2, "B"]
    sa = set(a)
    sb = set(b)
    c = sa.intersection(sb)
    Y a t'il une alternative?
    Merci d'avance,
    Phil

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 938
    Billets dans le blog
    6
    Par défaut
    Bonjour,
    Sur des chaînes ou des caractères ? Si caractères, sur un seul octet ? Si oui, ensembles de Byte en prenant leur code ASCII.
    Sinon, je ne vois pas comment faire, surtout si sont mélangées des données de types différents dans l'ensemble.

    [EDIT] si a = [1,2,"B"] crée en Python une chaîne de caractères de codes ASCII 1, 2 et Ord('B'), on peut mettre ces codes dans un ensemble en Pascal.
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre émérite
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Par défaut
    Bonjour,

    en Delphi tu peux faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    type
      TA = (s1, s2, s3, s4, sB = ord('B'));
     //TA = (s1=1,s2=2,s3=3,s4=4,sB = ord('B'));
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      st1          : set of TA;
      st2          : set of TA;
    begin
      st1 := [s1, s2, s4, sb];
      st2 := [s2, sb];
      if st1 * st2 = [s2, sb] then
        Caption := 'Ok';
    end;
    Cordialement,
    @+

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Bonjour ! Je ne comprends pas le titre de la discussion. Normalement ça devrait être "intersection entre deux ensembles de chaînes", non ?

    Qu'est-ce que vous voulez faire exactement ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 478
    Par défaut
    Merci pour vos réponses ;-)
    J'ai en fait deux ensemble de mots dont je dois détecter les mots semblables.
    Exemple: ensemble 1: lapin, chien, oiseau
    Ensemble 2: rat, chien, cheval
    L'intersection retournée doit être chien
    L'union doit être lapin, chien, oiseau, rat, cheval
    Merci pour vos idées,
    Phil

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Vous pourriez utiliser le type TStringList en guise de type ensemble, et écrire les fonctions dont vous avez besoin, quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    {$APPTYPE CONSOLE}
     
    {$R *.res}
     
    uses
      System.SysUtils, System.Classes;
     
    function Appartient(const aChaine: string; const aListe: TStringList): boolean;
    begin
      result := aListe.IndexOf(aChaine) >= 0;
    end;
     
    function Intersection(const aListe1, aListe2: TStringList): TStringList;
    var
      i: integer;
    begin
      result := TStringList.Create;
      for i := 0 to Pred(aListe1.Count) do
        if Appartient(aListe1[i], aListe2) then
          result.Append(aListe1[i]);
    end;
     
    function Union(const aList1, aList2: TStringList): TStringList;
    begin
     
    end;
     
    var
      vListe1, vListe2, vListe3: TStringList;
    begin
      try
        vListe1 := TStringList.Create;
        vListe2 := TStringList.Create;
     
        vListe1.Append('lapin');
        vListe1.Append('chien');
        vListe1.Append('oiseau');
     
        vListe2.Append('rat');
        vListe2.Append('chien');
        vListe2.Append('cheval');
     
        vListe3 := Intersection(vListe1, vListe2);
     
        WriteLn(Appartient('lapin', vListe3)); // FALSE
        WriteLn(Appartient('chien', vListe3)); // TRUE
     
        vListe1.Free;
        vListe2.Free;
        vListe3.Free;
      except
        on E: Exception do
          Writeln(E.ClassName, ': ', E.Message);
      end;
     
      ReadLn;
    end.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Intersection entre deux listes
    Par Sarah221985 dans le forum Prolog
    Réponses: 1
    Dernier message: 19/11/2007, 23h11
  2. requête where entre deux chaines de caractères
    Par soltani1 dans le forum Développement
    Réponses: 2
    Dernier message: 04/10/2007, 09h34
  3. requête entre deux chaines
    Par soltani1 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/10/2007, 16h05
  4. espace entre deux chaines de caractères
    Par Pitou5464 dans le forum Access
    Réponses: 2
    Dernier message: 09/08/2006, 12h16
  5. Réponses: 7
    Dernier message: 03/02/2006, 13h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo