Système clé/valeur constant (ex : Code Civil)

Bonjour à  tous !


 


Jeune initié à  l'Objective-C, je me permets de solliciter, s'il vous plaà®t, votre aide face au défi que je me suis lancé pour développer mon apprentissage : en effet, je souhaiterai créer un programme (“Code Civil”) qui permet à  l'utilisateur de saisir le numéro d'un article (par exemple “1382”) et de renvoyer son contenu (dans notre exemple : “Tout fait quelconque de l'homme, qui cause à  autrui un dommage, oblige celui par la faute duquel il est arrivé à  le réparer.”).


 


Pour cela, j'ai d'abord télécharger notre précieux Code civil sur legifrance.fr au format .txt et j'ai balisé les articles de la manière suivante :


 


@Article 1


blablabla


@Article 2


blablabla


@Article 3


blablabla


...


 


En s'initialisant, à  partir du fichier .txt, mon programme remplie 2 NSMutableArray(s) :


listeNumeros = [1, 2, 3, ...]


listeContenus = [blablabla, blablabla, blablabla, ...]


 


Puis il fait une boucle sur listeNumeros pour voir si le numéro d'article saisi par l'utilisateur est dans la liste et, s'il existe, il renvoie la position de l'objet dans le tableau listeNumeros ; position qui correspond à  celle de l'article associé dans le tableau listeContenus.


 


Tout fonctionne mais je voudrais éviter l'étape de remplissage des 2 tableaux et utiliser un fichier constant, d'où je me suis penché sur la solution NSDictionary, et plus précisément sur la property list, d'où j'ai constitué un fichier au format suivant :


 


<plist version="1.0">


<dict>


<key>1</key>


<string>blablabla</string>


<key>2</key>


<string>blablabla</string>


</dict>


</plist>


 


Mon programme génère désormais un NSDictionary à  partir de ma plist mais je ne sais pas comment comparer la saisie de l'utilisateur avec les clés du NSDictionary ; d'où ma 1ère question : comment comparer une string avec toutes les clés d'un NSDictionary ?


 


Par ailleurs, je me demande si cette solution est la plus efficace ; j'ai aussi entendu parler de archiver : est-ce plus adapté pour un système clé/valeur constant (avec beaucoup de valeurs) ?


 


En restant à  votre disposition, je vous remercie d'avance pour vos réponses et vous souhaite une très bonne continuation !


 


Paul


Réponses

  • LarmeLarme Membre
    mars 2014 modifié #2

    J'ai pas trop suivi le pourquoi de la comparaison des clés, mais :



    if ([tonDico objectForKey:@uneCle])
    {//alors il y a un article}

    ça permet de vérifier que ton NSDictionnary possède bien une valeur pour "uneCle".


    Ou la manière brute pour itérer sur un NSDictionary :



    for (NSString *aKey in tonDico)
    {//tu peux faire un [tonDico objectForKey:aKey]}

  • Le NSDictionnary est tout à  fait adapté à  ton problème. Tu lui donne un mot (=une clé = key = NSString un numéro d'article) il te retourne la définition (=un objet = NSString = le contenu de ton article). Si aucune clé n'est trouvé il ne te renvois rien.


     


    Par contre attention à  la license d'exploitation de la base Legifrance !


  • CéroceCéroce Membre, Modérateur

    Mon programme génère désormais un NSDictionary à  partir de ma plist mais je ne sais pas comment comparer la saisie de l'utilisateur avec les clés du NSDictionary ; d'où ma 1ère question : comment comparer une string avec toutes les clés d'un NSDictionary ?



    On n'a pas à  faire ça. Un dictionnaire associe un mot (la "clef") à  sa définition (la "valeur").

    Comme indiqué par Larme, tu disposes de la méthode:

    - (id)objectForKey:(id)aKey


    NSMutableDictionary possède la méthode inverse:

    - (void)setObject:(id)anObject forKey:(id < NSCopying >)aKey

    En général, la clef est une NSString, et on peux lui associer n'importe quel objet.


    NSDictionary est implementée sous la forme d'une table de hachage.


     


    (Il est possible d'énumérer les clefs d'un dictionnaire, mais ce n'est pas ici la bonne méthode).


  • PaulGPaulG Membre

    Merci beaucoup pour vos réponses ! Ca m'a beaucoup aidé !



    En y repensant, c'est vrai que ce n'est pas très malin d'appréhender un NSDictionnary comme un NSArray ...


    Merci encore, bonne continuation !


Connectez-vous ou Inscrivez-vous pour répondre.