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 :

Collection basée sur une autre.


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    maa
    maa est déconnecté
    Membre éclairé
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Par défaut Collection basée sur une autre.
    Bonjour,

    Voici un problème sur lequel je retombe souvent.

    Etant donné une collection, comment créer une seconde collection dont chaque élément renvoi une expression basée sur un élément correspondant de la première collection.

    La première solution qui vient à l'idée serait d'utiliser une énumération :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaPremiereCollection.Select(y=>expression(y));
    Le problème est que l'expression est réévaluée à chaque appel sur l'énumération. Si l'expression est lourde ça peut être gourmand en terme de performance. Pire, cette solution n'est pas utilisable si on renvoi dans Select() une nouvelle instance. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaPremiereCollection.Select(y=>new NewObject(expression(y)));
    car alors à chaque appel sur un élément de l'énumération on crée une nouvelle instance d'objet.

    On pourrait alors penser faire un ToList() pour fixer cette énumération dans une collection, mais alors celle-ci sera en décalage avec la collection de base si cette dernière à été mise à jour.

    Ce que je pensais ensuite faire, c'est synchroniser la première collection et la seconde avec des événements, mais cela est fastidieux à mettre en place à chaque fois...

    Auriez-vous une solution/un pattern pour ce problème ?

    merci d'avance.

    mathmax

  2. #2
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Salut,

    en gros, à partir de ta liste de xi, tu veux avoir un accès facile à une liste de f(xi).
    Plutôt que faire une seconde liste contenant tous les éléments de la première transformés, pourquoi ne pas faire une liste qui n'applique ta fonction f que quand c'est nécessaire ? C'est à ta dire, tant qu'on a pas fait NewList[i], tu n'appliques pas f au i-ième élément de la liste d'origine.
    Après, tu peux rajouter du cache dans cette liste si besoin.

    Tu as vu la BindingListView ? C'est ce qui est fait dedans, il me semble. Et puis, les sources du Framework étant (ou bientôt) dispo, tu pourras voir comment la DataView fonctionne

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Et puis, les sources du Framework étant (ou bientôt) dispo, tu pourras voir comment la DataView fonctionne
    Bof .... avec Reflector ça se fait très bien

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Bof .... avec Reflector ça se fait très bien
    Oui mais attention à la propriété intellectuelle. D'ailleurs open source ou pas, la propriété intellectuelle s'appliquera toujours. Prudence.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  5. #5
    maa
    maa est déconnecté
    Membre éclairé
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Par défaut
    en gros, à partir de ta liste de xi, tu veux avoir un accès facile à une liste de f(xi).
    Plutôt que faire une seconde liste contenant tous les éléments de la première transformés, pourquoi ne pas faire une liste qui n'applique ta fonction f que quand c'est nécessaire ? C'est à ta dire, tant qu'on a pas fait NewList[i], tu n'appliques pas f au i-ième élément de la liste d'origine.
    C'est exactement ce que je voudrais. SI tu dis que la BindingListView fait cela, c'est cool. Je n'ai malheureusement pas trouvé comment faire avec l'implémentation que j'ai. J'utilise cette BindingListView . Peut-être en utilises-tu une autre ? Ou peut-être que c'est possible à faire avec celle que j'ai ? Quelles méthodes/propriétés utilises-tu dans ce cas ?

  6. #6
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par maa Voir le message
    C'est exactement ce que je voudrais. SI tu dis que la BindingListView fait cela, c'est cool. Je n'ai malheureusement pas trouvé comment faire avec l'implémentation que j'ai. J'utilise cette BindingListView . Peut-être en utilises-tu une autre ? Ou peut-être que c'est possible à faire avec celle que j'ai ? Quelles méthodes/propriétés utilises-tu dans ce cas ?
    J'utilise celle-là, c'est moi qui t'avais filé le lien il y a quelques semaines La BLW encapsule chaque objet de sa source dans un ObjectView<T>, qui n'est créé que si nécessaire. Tu peux t'en inspirer.

    @SaumonAgile : le but est pas de piquer le code de Crosoft, hein Juste que cette bande de zigotos a pas cru bon d'implémenter un équivalent de la DataView pour les collections classiques, c'est pourquoi ce cher maa essaie depuis un certain temps maintenant de le faire.

Discussions similaires

  1. requete suppression avec critere base sur une autre requete
    Par strouve dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 16/07/2012, 10h18
  2. Réponses: 14
    Dernier message: 31/08/2010, 11h25
  3. Réponses: 7
    Dernier message: 21/04/2010, 19h27
  4. Réponses: 2
    Dernier message: 23/10/2007, 08h11
  5. Formulaire avec liste basée sur une autre table
    Par sabotage dans le forum Langage SQL
    Réponses: 6
    Dernier message: 10/08/2005, 13h43

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