begin process at 2010 02 10 10:57:56
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Algorithme

 > 

Maths

 > 

Suppression de données utiliser par une boucle, dans une boucle


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Suppression de données utiliser par une boucle, dans une boucle

jeudi 23 avril 2009 à 11:34:07 | Suppression de données utiliser par une boucle, dans une boucle

simlaboum

Bon, en gros:
pour chaque élément d'un liste, si l'élément prend une certaine valeur, je le supprime.

il semblerait que ce ne soit pas prévu et autoriser par Maitre C#. En soit, ça ce tiens, mais il n'y aurait pas un truc du genre: "removeLater()'?

Merci et bien le bonjour chez vous.


Tagadatsointsoin!!!
jeudi 23 avril 2009 à 12:48:05 | Re : Suppression de données utiliser par une boucle, dans une boucle

Bidou

Administrateur CodeS-SourceS
Réponse acceptée !
Avec les méthodes remove et removeAt des listes, non?
Merci de préciser la question voire éven. d'ajouter du code.



-Blog-
-Site Perso-
jeudi 23 avril 2009 à 13:57:45 | Re : Suppression de données utiliser par une boucle, dans une boucle

simlaboum


Voila le code:
                List<string> toto = new List<string>();
                toto.Add("a");
                toto.Add("c");
                toto.Add("d");
                foreach (string lettre in toto)
                {
                    if (lettre == "c")
                    {
                        toto.Remove(lettre);
                    }
                }
Désole, je ne trouve pas comment le mettre avec des belle couleur.

voila l'erreur:
Collection was modified; enumeration operation may not execute.

a+

Tagadatsointsoin!!!
jeudi 23 avril 2009 à 14:13:54 | Re : Suppression de données utiliser par une boucle, dans une boucle

ed73

Réponse acceptée !
Bonjour,

En effet, il n'est pas possible de supprimer ou d'ajouter un élément à une collection pendant qu'on est en train d'itérer dessus.

Une solution pourrait d'être de renseigner une List<int> des index des éléments à suprimer puis d'itérer sur cette liste et d'utiliser RemoveAt  sur ta List<string>

ed73
jeudi 23 avril 2009 à 14:23:12 | Re : Suppression de données utiliser par une boucle, dans une boucle

leprov

Réponse acceptée !
Le plus simple et efficace est simplement de boucler avec un for inversé. Le foreach enmpeche la suppression. Le for n'empeche pas la suppression mais engendre des bugs (evidemment, on loupe des valeurs)

for (int i = myList.Count - 1; i >= 0; --i)
{
myList.RemoveAt(i);
}
jeudi 23 avril 2009 à 14:24:19 | Re : Suppression de données utiliser par une boucle, dans une boucle

simlaboum

Merci bien, finalement, je vais adopté une tournure d'esprit plus positive: créer une liste des éléments que je veux garder...
a+

Tagadatsointsoin!!!
jeudi 23 avril 2009 à 14:28:39 | Re : Suppression de données utiliser par une boucle, dans une boucle

Bidou

Administrateur CodeS-SourceS
ed73> Bien sûr que c'est faisable, et encore heureux!
Ce qui n'est pas possible, c'est de le faire lorsqu'on travaille avec un Enumerator...

La boucle for convient tout à fait, avec les méthodes remove ou removeAt comment indiqué dans le premier poste et dans celui de leprov...



-Blog-
-Site Perso-
jeudi 23 avril 2009 à 15:31:33 | Re : Suppression de données utiliser par une boucle, dans une boucle

ed73

Je me suis exprimé un peu vite, il est bien évident que je voulais parler de foreach.

Par contre il y a des cas (rares) où l'utilisation de for() n'est pas possible. Actuellement je travaille avec Microsoft.Office.Interop.MSProject (automation Microsoft Project) et il faut impérativment parcourir les diverses collections avec un énumérateur car il y a souvent des éléments null dans les collections qui ne sont pas comptabilisés par le Count et ce de manière totalement aléatoire, le seul moyen de ne rien rater est d'utiliser foreach(), mais bon c'est peut-être un bug de Project.

ed73
jeudi 23 avril 2009 à 15:56:35 | Re : Suppression de données utiliser par une boucle, dans une boucle

Bidou

Administrateur CodeS-SourceS
Ha?
Tu as un exemple concret? jamais entendu parlé de ça...



-Blog-
-Site Perso-
jeudi 23 avril 2009 à 16:54:43 | Re : Suppression de données utiliser par une boucle, dans une boucle

ed73

Voici comment je m'en suis aperçu.

Pour itérer sur les ressources affectées à une tâche on avait une boucle

for(int i = 1;i<=Task.Resources.Count;i++)
   if(Task.Resources[i]!=null)
      DoSomething(Task.Resources[i]));

Il manquait systématiquement plusieures ressources, après plusieurs essais j'ai finalement fait un truc stupide pour voir

for(int i = 1;i<=Task.Resources.Count + 10;i++)
   if(Task.Resources[i]!=null)
      DoSomething(Task.Resources[i]));

Eh bien ça a marché jusqu'à Task.Resources.Count + 3 et j'ai récupéré toutes les ressources.

Finalement la solution était

foreach(Resource res in Task.Resources)
   DoSomething(res);

L'itération se fait correctement et je récupère toutes les ressources. Je pense que MSProject ne gère pas les collections comme il faudrait et ne comptabilise pas les éléments null dans le Count.


1 2

Cette discussion est classée dans : boucle, élément, données, utiliser, suppression


Répondre à ce message

Sujets en rapport avec ce message

Quelle technologie utiliser ? [ par NHV ] Bonjour,j'aimerais développer une simulation, ce qui veut dire qu'il y a des changements de données d'affichage dans l'interface à chaque seconde. Je ajout modif et suppression de données [ par flab ] bonjour à tous, je travaille avec une bdd sql sever, j'arrive bien à afficher mes données mais pas à les manipuler (ajout, suppression, modification) suppression des élément recherchés d'une listbox [ par BOUDDINE ] BOnjour tout le mondeSVP si quelqu'un peut m'aiderje vous expliquej'ai une listBOx remplie par des donnéespar exemple tazertya Comment Interdire la suppression d'une base mdb ?? [ par realabdel ] Bonjour tous le monde, j'ai une base de données .mdb partagé dans le réseau, et protégé par un mot de passe. le problème est que n'importe quel utilsa FileSystemWatcher et suppression de dossier [ par Ziman ] Bonjour,je fais un petit programme de surveillance de fichier/dossier et j'ai un petit soucis. J'aimerai réagir à la suppression d'un fichier ou dossi Choix de la base de données [ par zabrat ] Bonjour a tous, je dois faire un projet en c# pour la gestion des resources d'une entreprise. Tous le projet est basé sur le choix de la base de donné récolté des données à partir d'un script pour les utiliser dans un programme [ par draonix ] Bonjour à tous ,Et oui je ne peux m'empêcher de vous enquiquiner avec mes questions mais j'en ai tellement appris grace à vous que je sollicite une fo Gestion de données, utiliser une base de données ou créer sa propre class ? [ par scottmat ] Bonjours à tous , J'ai une question toute bête. Lorsqu'on dév suppression d'un ensemble de base de données [ par adsana ] salutj'ai réalisé un simulateur du réseau et j'ai besoin de sauvegarder les simulations.Donc avant d'ouvrir une nouvelle simulation l'utilisateur sais


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,718 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales