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

avec Java Discussion :

Identifier les mots dans les tableaux


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 15
    Points : 15
    Points
    15
    Par défaut Identifier les mots dans les tableaux
    Bonjour,

    J'ai 4 tableaux de type string comme ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	String[] D1= {"marc", "alain", "george"};
    	String[] D2= {"andre", "bertin"};
    	String[] D3= {"alain", "bertin", "maison", "bertin"};
    	String[] D4= {"maurice", "paulin", "angel", "soulier", "bertin"};
    Il me faudrait dire dans combien de tableau chaque élément est repris. Par exemple, "bertin" est repris 3 fois dans D2, D3 et D4 et marc une seule fois dans D1.

    Quelqu'un a-t-il un truc qui peut me faire avancer rapidement. Je ne trouve pas encore...

    Merci d'avance.

    Mutkas

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 281
    Points : 321
    Points
    321
    Par défaut
    Utilise un compteur et parcours chaque tableau.

  3. #3
    Membre habitué Avatar de zhouyu
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 90
    Points : 143
    Points
    143
    Par défaut
    Salut.
    Personnellement j'utiliserais un dictionnaire.
    La clé c'est ton mot, la valeur le nombre d’occurrence.
    Si ta clé n'existe pas, tu l'ajoutes avec une valeur de 1, sinon tu augmentes sa valeur de 1
    Tu n'as plus qu'à parcourir ton dico pour avoir les occurrences.

  4. #4
    Membre confirmé
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Points : 559
    Points
    559
    Par défaut
    Bonjour,
    pour éviter les multiples parcours (globalement, on va chercher chaque élément de chaque tableau dans chaque tableau...)
    on peut mettre chaque tableau dans un string avec une fonction du genre implode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public static String implode(String delim, String[] args){
    		StringBuffer sb = new StringBuffer();
     
    	for(int i =0; i < args.length; i++){
    		if (i > 0)
    			sb.append(delim);
    		sb.append(args[i]);
    	}
     
    	return sb.toString();
    }
    Après l'appel de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String sD1=implode(",",D1);
    sD1 contient marc,alain,george

    et ensuite, on peut chercher un élément par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public static boolean implodeArrayContains(String needle, String implodeArray,String delim) {
    	return (delim+implodeArray+delim).contains(delim+needle+delim);
    }
    implodeArrayContains("alain",sD1,",") retourne true

    Enfin, le dictionnaire de zhouyu est une bonne idée pour stocker le résultat du comptage...

    On pourrait se dire que c'est beaucoup d'efforts pour économiser pas grand chose puisqu'il n'y a que 4 tableaux...
    Mais ce serait un tort, rien que pour 4 tableaux, on passe de 196 itérations prévues (14 éléments X 14 éléments) à 56 (14 élément X 4 chaînes)

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par kox2ee Voir le message
    On pourrait se dire que c'est beaucoup d'efforts pour économiser pas grand chose puisqu'il n'y a que 4 tableaux...
    Mais ce serait un tort, rien que pour 4 tableaux, on passe de 196 itérations prévues (14 éléments X 14 éléments) à 56 (14 élément X 4 chaînes)
    Dude. Tu as juste remplacé ces itérations de tableau par des itérations de String.
    Cela ne sert absolument à rien.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 281
    Points : 321
    Points
    321
    Par défaut
    Ou alors tu peux utiliser un HashMap<String, Integer> : http://docs.oracle.com/javase/6/docs...l/HashMap.html

    Tu vérifies si ton mot est dans le HashMap. Si oui tu incrément le compteur, Si non tu le put avec un compteur=1.

  7. #7
    Membre confirmé
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Points : 559
    Points
    559
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Dude. Tu as juste remplacé ces itérations de tableau par des itérations de String.
    Cela ne sert absolument à rien.
    heu ben je ne suis pas trop d'accord...
    J'ai juste oublié les itérations dues au implode (soit 14)
    Ce qui fait 70 itérations (14 éléments X 4 chaînes + 14)
    C'est toujours mieux que les 196...

    A moins que l'utilisation du String.contains soit plus coûteuse que le parcours de tableaux...

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par kox2ee Voir le message
    A moins que l'utilisation du String.contains soit plus coûteuse que le parcours de tableaux...
    C'est évident. String.contains() est un parcours de deux String. Concaténer des String ne réduit pas la complexité, pas plus que concaténer des tableaux ne réduit leur temps de parcours.
    Ce n'est pas de la magie. C'est des maths.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre confirmé
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Points : 559
    Points
    559
    Par défaut
    Citation Envoyé par thelvin Voir le message
    C'est évident. String.contains() est un parcours de deux String. Concaténer des String ne réduit pas la complexité, pas plus que concaténer des tableaux ne réduit leur temps de parcours.
    Ce n'est pas de la magie. C'est des maths.
    C'est vrai, c'est totalement crétin de ma part !
    On ne pense pas toujours aux conséquences des méthodes appelées, focalisé qu'on est sur son propre code.

    En suivant la même logique, j'aurai préféré utiliser une méthode du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public static boolean inArray(Object needle, Object[] haystack) {
    	return (Arrays.binarySearch(haystack, needle) >= 0);
    }
    En ayant trié au préalable les tableaux, plutôt que de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public static boolean inArrayEquals(Object needle, Object[] haystack) {
    	for(int i=0;i<haystack.length;i++){
    		if(needle.equals(haystack[i]))
    			return true;
    	}
    	return false;
    }

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/08/2009, 17h09
  2. Souligner les mots dans les documents après une recherche
    Par Watier_53 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 27/06/2008, 10h50
  3. les classes et les templates dans les plugins
    Par asoka13 dans le forum C++
    Réponses: 22
    Dernier message: 24/01/2008, 17h11
  4. Réponses: 4
    Dernier message: 11/09/2006, 16h55
  5. Les polices dans les tables et les requêts
    Par zooffy dans le forum Access
    Réponses: 3
    Dernier message: 21/06/2006, 11h06

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