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

C# Discussion :

Recherche dans une liste ou array [Débutant]


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 246
    Points : 123
    Points
    123
    Par défaut Recherche dans une liste ou array
    Bonjour,

    Soit une liste de valeurs de type:
    6200302;28,14,18
    6200303;18,14
    ;25,46,52
    ;60,1

    Qu'est ce que je cherche ?
    Trouver les string qui contiennent une valeur (uniquement dans les valeurs après le point-virgule), mais les "encadrements" de valeurs ne sont pas toujours les mêmes.
    Par exemple, si je cherche 18, je dois sortir "6200302;28,14,18" et "6200303;18,14", mais ma difficulté est que le 18 peut être précédé d'un ";" ou d'une "," et être suivi d'une "," ou c'est la fin de la string.
    Donc ce que je cherche est précédé soit de ";" soit de "," et suivi de "," soit c'est la fin de la string.
    Je pense que le regex est la meilleur solution, mais je n'arrive pas à écrire le regex qui correspond à ce dont j'ai besoin.

    Merci de votre aide et, éventuellement, de l'explication du regex (pour que j'apprenne).

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 177
    Points : 25 125
    Points
    25 125
    Par défaut
    fais un algo qui parcourt le string avec une paire de variable, c'est un peu la base de l'algorithmie ...
    (y en a pour 10 lignes de code, indexof pour commencer à partir du ; puis concaténer jusqu'à trouver une , si la concaténation est ce que tu cherches c'est bon, si arrivé à la fin tu n'as rien trouvé c'est pas bon)

    les regex c'est souvent pour ceux qui ne savent pas coder, car c'est général beaucoup plus lent qu'un algo spécifique
    (ou pour ceux qui veulent aller vite pour un truc appelé ponctuellement, je vous l'accorde)

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2007
    Messages : 246
    Points : 123
    Points
    123
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    fais un algo qui parcourt le string avec une paire de variable, c'est un peu la base de l'algorithmie ...
    les regex c'est souvent pour ceux qui ne savent pas coder, car c'est général beaucoup plus lent qu'un algo spécifique
    (ou pour ceux qui veulent aller vite pour un truc appelé ponctuellement, je vous l'accorde)
    Je pensais, visiblement à tort, qu'un regex de type list.where(x => regex.ismatch(x)) serait plus rapide sur des listes de plusieurs milliers de lignes que de boucler jusqu'à trouver le bon.
    Mais si c'est plus lent, je vais y aller avec 2 split imbriqués (d'abord un split sur le ";" puis un split sur le ","). Ça devrait faire l'affaire.

    Merci de l'info.

  4. #4
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Jean-Marc68 Voir le message
    Je pensais, visiblement à tort, qu'un regex de type list.where(x => regex.ismatch(x)) serait plus rapide sur des listes de plusieurs milliers de lignes que de boucler jusqu'à trouver le bon.
    Mais si c'est plus lent, je vais y aller avec 2 split imbriqués (d'abord un split sur le ";" puis un split sur le ","). Ça devrait faire l'affaire.

    Merci de l'info.
    Ca donne ce que tu veux.
    Pas forcément le plus optimisé, mais ça marche.
    Code csharp : 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
    namespace SearchArray
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                string[] myArray = { "6200302;28,14,18", "6200303;18,14", ";25,46,52", ";60,1", ";18" };
     
                const string VAL = "18";
     
                Console.WriteLine("Hello, World!");
     
                myArray.Where(a => a.Split(';')[1].Split(',').Any(a => a == VAL)).ToList().ForEach(a => { Console.WriteLine(a); });
            }
        }
    }

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

Discussions similaires

  1. [VBA-Excel] Effectuer une recherche dans une liste view
    Par Miles Raymond dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/11/2006, 18h21
  2. Imposer une methode Equals pour une recherche dans une List
    Par petozak dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 03/10/2006, 11h41
  3. Réponses: 2
    Dernier message: 07/07/2006, 11h00
  4. Réponses: 2
    Dernier message: 10/10/2005, 03h25
  5. Recherche dans une liste non trié
    Par Oberown dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 13/09/2004, 14h56

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