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

Ruby Discussion :

Méthode de recherche dans une table de classes


Sujet :

Ruby

  1. #1
    Membre régulier Avatar de abir84
    Inscrit en
    Mars 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 214
    Points : 116
    Points
    116
    Par défaut Méthode de recherche dans une table de classes
    Bonjour

    voila j'ai besoin de trouver (oucréer ) une méthode de recherche dans un tableau. J'ai une table de classes Q
    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
     
     class Q
       $n
      $1
      $2
      def initialize (n, p1, p2)
        $no=n
        $p1=p1
        $p2=p2
      end
      def numero
        return $n
      end
      def pot1
        $p1
      end
      def pot2
        $p2
      end
    end
    code de la table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $pot = Array.new
     
    def init_potentiels chemin_fichier
    ...
      readme = ....
      readme.each do|q|
        p=Question.new  q[0],q[1],q[2]
        $pot<< p
     end
    ...
    end
    Le problème c'est que je n'arrive pas à rechercher les elements du tableau, j'ai besoin d'une méthode comme find_by {|q|, q.numero = param.numero}

    Des idées? des proposistions? Je peux meme remplacer array par une autre possibilité si vous en avez.

    Une autre question, comment on déclare une méthode publique en Ruby?

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    tu cherches à obtenir l'indice d'un tableau par rapport à la valeur ?

    si c'est le cas, index est tout indiqué pour toi :

    Extrait de la doc :

    Returns the index of the first object in arr such that the object == anObject. Returns nil if no match is found.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    a = [ "a", "b", "c" ]
    a.index("b") 	» 	1
    a.index("z") 	» 	nil
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  3. #3
    Membre régulier Avatar de abir84
    Inscrit en
    Mars 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 214
    Points : 116
    Points
    116
    Par défaut
    Citation Envoyé par titoumimi Voir le message
    tu cherches à obtenir l'indice d'un tableau par rapport à la valeur ?

    si c'est le cas, index est tout indiqué pour toi :

    Extrait de la doc :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    a = [ "a", "b", "c" ]
    a.index("b") 	» 	1
    a.index("z") 	» 	nil
    Justement, dans mon cas b est une classe dont je connais un seul attribut (j'ai q.n et je veux recupérer q pour voir q.p1 et q.p2)

  4. #4
    Membre régulier Avatar de abir84
    Inscrit en
    Mars 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 214
    Points : 116
    Points
    116
    Par défaut
    J'ai voulu faire qque chose comme suit :
    a.index {|q| q.n= numero} en analogie avec le find_by mais ça n'a pas marché (je suis debutante, je connais pas bien la syntaxe)

  5. #5
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    ok, alors je pense que map est ta solution :

    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
     
    # classe bateau juste pour dire
    class Canard
      attr_accessor :nom, :age
     
      def initialize(nom)
        @age = rand(42)
        @nom = nom
      end
    end
     
    # On remplit notre tableau
    a = []
    ['riri', 'fifi', 'loulou'].each { |nom|
      a << Canard.new(nom)
    }
     
    # élément à rechercher, on ne connait que le nom
    x = 'riri'
     
    # Recherche
    a.map{ |elt|
      if elt.nom == x
        puts elt.age
      end
    }
    Si tu veux ajouter une méthode à la classe Array, tu peux juste faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class Array
      def find_by_perso
       # plein de code
      end
    end
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  6. #6
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    Sinon, pour appliquer une méthode spécifique à tes tableaux, tu peux aussis définit une classe perso :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class ArrayPerso < Array
      def ma_recherche_a_moi
        #ton code
      end
    end
     
    mon_array_perso = ArrayPerso.new()
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  7. #7
    Membre régulier Avatar de abir84
    Inscrit en
    Mars 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 214
    Points : 116
    Points
    116
    Par défaut
    Merci beaucoup pour ton aide précieuse
    la fonction map semble marcher, mais j'ai un autre probleme, on dirait le tableau contient tjrs le meme élément. Lors de l'affichage, toutes les classes sont identiques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    p << Canard.new (name) 
    p.each {|e| 
      puts  "  ",e,"  " ,e.numero,"  ", e.pot1," ", e.pot2,"fin"
       }
    C'est tjrs le meme canard qui s'affiche!!

  8. #8
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    c'est que tu doit avoir un problème dans ton code, j'ai repris le code que je t'ai donné et voici l'état de mon tableau après remplissage :

    [
    #<Canard:0x2aa83e8 @nom="riri", @age=35>,
    #<Canard:0x2aa83d4 @nom="fifi", @age=39>,
    #<Canard:0x2aa8320 @nom="loulou", @age=6>
    ]
    (bien entendu, les âges changeront à chaque lancement...)
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  9. #9
    Membre régulier Avatar de abir84
    Inscrit en
    Mars 2007
    Messages
    214
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 214
    Points : 116
    Points
    116
    Par défaut
    Merci
    Justement mon code contient bcp de fautes
    Merci encore

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

Discussions similaires

  1. [SQL] recherche dans une table
    Par H-bil dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 06/06/2006, 11h26
  2. Recherche dans une table via un formulaire
    Par Z[ee]k dans le forum Access
    Réponses: 3
    Dernier message: 05/06/2006, 11h14
  3. [VB6] Erreur durant la recherche dans une table
    Par quaife dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/04/2006, 17h21
  4. Recherche dans une table
    Par Fredo67 dans le forum Access
    Réponses: 2
    Dernier message: 28/02/2006, 17h21
  5. recherche dans une table Access en ASP
    Par D-D dans le forum ASP
    Réponses: 3
    Dernier message: 09/06/2004, 10h12

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