none
Collection & remove RRS feed

  • Question

  • Salut à tous.

     

    Je dois manipuler un ensemble de données fortement dynamiques.

    Pour être plus clair, disons que j'ai un ensemble de mesures chimiques sur un ensemble de jours.

    J'utilisateur peut choisir de charger uniquement certaines mesures pour certains jours et, après traitement sur ces données, l'utilisateur peut passer à d'autres mesures pour d'autres jours.

     

    J'ai donc opté pour l'utilisation d'un TreeView pour l'affichage et d'un Dictionary pour contenir les données en interne.

    Pour ces deux structures de données, quand l'utilisateur choisi de changer de mesures ou de jours:

    1. j'efface les mesures obsolètes

    2. je charger les nouvelles données.

     

    C'est l'étape 1. qui me pose problème.

    J'ai essayé ceci:

     

    for each X in ma_collection

    if X... then X.Remove

    next

     

    mais .NET ne veut pas.

    J'ai alors essayé:

     

    for i=1 to ma_collection.Count

    if ma_collection.Item(i).... then ma_collection.Item(i).Remove

    next i

     

    sans succès.

     

    Avez-vous une idée ?

    Comment faire pour parcourir l'ensemble des éléments d'une Collection et en effacer certains ?

     

    Merci mille fois,

    Alain de Belgique.

     

     

     

    mercredi 23 juillet 2008 11:12

Réponses

  • Bonjour,

     

    Deux règles de base :

    • Lorsque l'on parcourt une collection à l'aide d'un itérateur (Foreach), il ne faut pas que durant ce parcourt la collection change.
    • Il faut donc parcourir la collection via un index et surtout en partant de la fin ! Sinon vous aurez un problème de décalage...

    Je ne suis pas sûr de ma syntaxe, car je suis spécialiste C# :

     

    Code Snippet

    For ma_collection.Count - 1 DownTo 1

       ma_collection.Item(i)

    Next i

     

    Cordialement

     

    mercredi 23 juillet 2008 12:45
    Modérateur

Toutes les réponses

  • Bonjour,

     

    Deux règles de base :

    • Lorsque l'on parcourt une collection à l'aide d'un itérateur (Foreach), il ne faut pas que durant ce parcourt la collection change.
    • Il faut donc parcourir la collection via un index et surtout en partant de la fin ! Sinon vous aurez un problème de décalage...

    Je ne suis pas sûr de ma syntaxe, car je suis spécialiste C# :

     

    Code Snippet

    For ma_collection.Count - 1 DownTo 1

       ma_collection.Item(i)

    Next i

     

    Cordialement

     

    mercredi 23 juillet 2008 12:45
    Modérateur
  • OK.

    J'ai trouvé une autre solution moins rapide, c'est de créer une collection temporaire qui contient les référence des élément de la collection principale à effacer. Il faut faire le travail en deux fois.

     

    Merci pour votre réponse,

    Alain.

     

    mercredi 23 juillet 2008 16:59