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

JavaScript Discussion :

Nombre d'éléments communs entre deux tableaux


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 45
    Par défaut Nombre d'éléments communs entre deux tableaux
    bonjour,
    étant donné deux tableaux de nombres entiers, j'aimerais trouver le nombre d'éléments communs entre les deux tbleaux:
    exemple
    nbcommun([1,2,1,3,4],[1,5,4,6]=2)
    voici mon code:
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    var nbcommun = function(tab1,tab2){
     
        var n=0;                                
        var n1=tab1.length;					    
        var n2=tab2.length;					    
        for(var i=0;i<n1;i++){
            for(var j=0;j<n2;j++){
                if(tab1[i]==tab2[j]){
                    n++;
                    break;
                }
            }
        }
        return n;
    };

    mon code marche bien quand il n'y a pas de doublons, par contre avec les doublons ca ne marche pas
    merci de me donner des idées

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Pour plus d'efficacité et un code de comparaison plus simple, je te conseille de trier tes deux tableaux.

    Qu'entends-tu par doublon ? Par exemple deux fois X dans le premier tableau et une foix X dans le second, le résultat devrait être quoi ?

    Sinon, ne serait-ce pas du Javascript ? Car ici, c'est le forum Java, ce qui n'a rien à voir...

    EDIT : OK message déplacé
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 45
    Par défaut
    merci pour cette réponse rapide
    oui c'est ca quand il y a deux fois x dans le premier et x dans le deuxième je veut que le résultat soit 1 et non pas 2 ce que me donne mon code
    d'autre part on a pas encore vu le tri de tableaux, donc je ne peux pas l'utiliser

    ps: oui c du java script!

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mai 2006
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2006
    Messages : 226
    Par défaut
    salut,

    dans tes boucles il faut que tu gères les fait que tu sois déjà passé sur un élément ou non.

    tu as plusieurs solutions, soit tu boucles une première fois sur tes deux tableaux pour enlever les doublons au sein du même tableau, sois tu stock les éléments sur lesquels tu es déjà passé pour ne pas les recompter.

    exemple:
    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
     
    var nbcommun = function(tab1, tab2) {
        var n = 0;
        var traites = [];
        var traites2 = [];
     
        tab1.forEach(function(item, i, arr) {
            if(traites.indexOf(item) != -1) return; //on test si on a deja traiter ce chiffre
     
            tab2.forEach(function(item2, i2, arr2) {
                if(traites2.indexOf(item2) != -1) return; //on test si on a deja traiter ce chiffre dans le 2eme tab
                if(item == item2) {
                    n++;
                    traites2.push(item2); //on rajoute le chiffre traiter afin de ne pas le traiter de nouveau
                }
            });
     
            traites.push(item); //on rajoute le chiffre traiter afin de ne pas le traiter de nouveau
        });
     
        return n;
    };
     
    console.log(nbcommun([1,2,1,3,4],[1,1,1,5,4,6])); //2
    console.log(nbcommun([1,2,3,4],[1,5,4,6])); //2
    console.log(nbcommun([2,3,4],[1,5,4,6])); //1
    console.log(nbcommun([1,2,3,4],[5,6])); //0
    y a surement moyen d'optimiser encore tout ça, mais c'est l'idée

  5. #5
    Membre Expert
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Par défaut
    Salut !
    Tu cherches une fonction d'intersection. Voici une implémentation possible :

    Code javascript : 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
    /*
     * @name intersection
     * @description Retourne la liste (sous forme de tableau Array) des éléments communs aux tableaux x et y
     *
     * @param {Array} x - 1er tableau
     * @param {Array} y - 2ème tableau
     *
     * @return {Array} res - intersection de x et y
     */
    function intersection(x, y) {
      'use strict';
     
      var i = 0,
          j = 0, 
          res = [],
          xLen = x.length,
          yLen = y.length;
     
      x.sort();
      y.sort();
     
      while (i < xLen && j < yLen) {
        if (x[i] < y[j]) {
          i++;
        } else if (y[j] < x[i]) {
          j++;
        } else {
          res.push(x[i]);
          i++;
          j++;
        }
      }
     
      return res;
    }
     
    var a = intersection([1,2,1,3,4], [1,5,4,6]);
    console.log(a); // [1, 4]
    console.log(a.length); // 2

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Bonjour,
    @Kaamo : et la version 140 caractères donne quoi ?

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

Discussions similaires

  1. [XL-2007] Recherche de commun entre deux tableaux
    Par louqui dans le forum Excel
    Réponses: 8
    Dernier message: 23/07/2014, 17h29
  2. trouver les éléments communs entre deux vecteurs
    Par Décembre dans le forum MATLAB
    Réponses: 5
    Dernier message: 21/07/2010, 09h38
  3. Réponses: 49
    Dernier message: 26/05/2010, 21h58
  4. Réponses: 15
    Dernier message: 17/06/2006, 11h49

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