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

Objective-C Discussion :

Array multiple avec les mêmes key


Sujet :

Objective-C

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 76
    Points : 42
    Points
    42
    Par défaut Array multiple avec les mêmes key
    Bonjour,

    J'aurai besoin de votre aide pour une question peut-être bête.

    J'aimerai faire un tableau de ce type :

    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
    {
        "animaux" =     (
            chevre,
            vache,
            vrevis
        );
     
        "liquide" =     (
            eau,
            jus,
            coca,
            vodka,
            Biere
        );
    }
    J'ai donc fait un NSMutableDictionnary avec comme key "animaux" et "liquide" et dedans j'aoute mon NSMutableArray avec mes valeurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        [test2 addObject:@"eau"];
        [test2 addObject:@"coca"];
        [test2 addObject:@"jus"];
        [test2 addObject:@"vodka"];
     
        [test setObject:test2 forKey:@"liquide"];
     
        [test2 addObject:@"chevre"];
        [test2 addObject:@"vache"];
        [test2 addObject:@"brevis"];
        [test setObject:test2 forKey:@"animaux"];
     
        [test2 addObject:@"Biere"];
        [test setObject:test2 forKey:@"liquide];
    Probleme, toutes les données sont dans "liquide" et "animaux" ...

    Comme peut-on différencier les "FORKEY"

    Merci

  2. #2
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Février 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 115
    Points : 139
    Points
    139
    Par défaut
    je trouve ta question un peu obscure,
    en gros tu as un tableau de dictionnaires, ça veut dire quoi <différencier les "FORKEY"> ?
    C'est quoi ton but ?

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par Phago Voir le message
    je trouve ta question un peu obscure,
    en gros tu as un tableau de dictionnaires, ça veut dire quoi <différencier les "FORKEY"> ?
    C'est quoi ton but ?
    À la vue de son code, le problème est visible (du moins, c'est ce que je pense )

    Il veut faire un dictionnaire avec comme couple, une clef (une chaîne de caractères) et une liste.
    En gros ceci {("liquide", ["eau", "coca", "jus", "vodka"]), ("animaux", ["chevre", "chevre", "brebis"])}


    Mais il ajoute la même liste pour 2 clefs différentes (avec une modification de cette liste) et il ne comprend pas pourquoi il a la liste avec tous les mots clefs pour les 2 clefs de son dictionnaire
    En gros ceci {("liquide", ["eau", "coca", "jus", "vodka", "chevre", "chevre", "brebis"]), ("animaux", ["eau", "coca", "jus", "vodka", "chevre", "chevre", "brebis"])}

  4. #4
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Février 2010
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 115
    Points : 139
    Points
    139
    Par défaut
    Citation Envoyé par foetus Voir le message
    À la vue de son code, le problème est visible (du moins, c'est ce que je pense )

    Il veut faire un dictionnaire avec comme couple, une clef (une chaîne de caractères) et une liste.
    En gros ceci {("liquide", ["eau", "coca", "jus", "vodka"]), ("animaux", ["chevre", "chevre", "brebis"])}


    Mais il ajoute la même liste pour 2 clefs différentes (avec une modification de cette liste) et il ne comprend pas pourquoi il a la liste avec tous les mots clefs pour les 2 clefs de son dictionnaire
    En gros ceci {("liquide", ["eau", "coca", "jus", "vodka", "chevre", "chevre", "brebis"]), ("animaux", ["eau", "coca", "jus", "vodka", "chevre", "chevre", "brebis"])}
    Ah yes. Effectivement c'est le genre de truc permis par le langage (ajouter tout et n'importe quoi dans une structure de donnée) mais qui reflète - à mon avis - surtout un défaut d'algo

    Dans tout les cas tu ne peux pas vraiment procéder en une seule étape,
    au pire tu peux toujours faire des choses genre

    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
     
    NSMutableArray *fourreTout = [@[] mutableCopy];
    	NSMutableDictionary *dictionnaire = [@{} mutableCopy];
     
    	NSArray *boisson = @[@"biere",@"vodka"];
    	[dictionnaire setObject:boisson forKey:@"boisson"];
    	[fourreTout addObjectsFromArray:boisson];
     
    	NSArray *animaux = @[@"chevre",@"vache",@"brebis"];
    	[dictionnaire setObject:animaux forKey:@"animaux"];
    	[fourreTout addObjectsFromArray:animaux];
     
    	NSLog(@"%@ %@ %@",dictionnaire[@"boisson"],dictionnaire[@"animaux"],fourreTout);
            /* sortie */
     (
        biere,
        vodka
    ) (
        chevre,
        vache,
        brebis
    ) (
        biere,
        vodka,
        chevre,
        vache,
        brebis
    )

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par Phago Voir le message
    Ah yes. Effectivement c'est le genre de truc permis par le langage (ajouter tout et n'importe quoi dans une structure de donnée) mais qui reflète - à mon avis - surtout un défaut d'algo
    Je ne suis pas d'accord: c'est le développeur qui ne sait pas ce qu'il code

    La documentation le dit clairement:
    A strong reference to the object is maintained by the dictionary.
    En gros, il n'y a pas de copie de faite, mais un ajout de référence (un pointeur et le compteur +1).
    Donc, tu travailles avec 1 liste originale et 2 références (1 pour chaque ajout)

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Points : 17
    Points
    17
    Par défaut
    Je ne sais pas si shadow578 a compris donc je vais essayer de le dire plus simplement :

    1- tu as crée un tableau dans lequel du mis des boissons
    2- tu ajoutes ce tableau comme valeur associée à la clé "liquide" dans ton dictionnaire
    3- tu ajoutes toujours au même tableau des animaux
    4- tu ajoutes ce tableau comme valeur associée à la clé "animaux" dans ton dictionnaire

    en 2, tu ajoutes une référence (forte) vers ton tableau comme valeur associée à la clé "liquide"

    entre 2 et 3, le tableau n'a pas changé d'état, il contient toujours tes boissons.

    après 3, l'état de ton tableau a changé : il contient boissons et animaux
    donc dans ton dictionnaire la valeur associée à "liquide" est ton tableau qui contient boissons ET animaux
    CAR le dictionnaire a une référence forte vers ton tableau.
    Si ce n'était pas le cas (une référence forte), ton dictionnaire ne contiendrait pas de valeur (en fait ce serait sûrement NSNull) associée à tes clés, une fois ta méthode appelée.

    après 4, ton dictionnaire contient du paire clé/valeur.
    Les 2 clés sont différentes certes mais les 2 valeurs sont en fait 2 références vers le même tableau.
    Ainsi lorsque tu affiches le contenu du dictionnaire, tu as des valeurs identiques pour tes clés.

    La solution est donc de faire un 2ème tableau pour les animaux plutôt que de réutiliser le premier.

Discussions similaires

  1. Namespace avec les même méthodes, comment faire la différence ?
    Par Yoshio dans le forum Général Dotnet
    Réponses: 9
    Dernier message: 17/02/2008, 15h14
  2. Réponses: 1
    Dernier message: 19/07/2007, 14h53
  3. Réponses: 9
    Dernier message: 25/04/2007, 15h54
  4. Copier contenu TB_A dans TB_B avec les même champs
    Par snoopy69 dans le forum Access
    Réponses: 3
    Dernier message: 13/10/2005, 16h22
  5. pbm avec les foreigns keys.....
    Par j_bonc dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 11/06/2004, 10h23

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