Bonsoir,

Je travaille actuellement sur un projet pour lequel je dois réutiliser un script php.
Je débute en c# et je galère pas mal pour faire la retranscription du php vers c#
En voulant débugger ce que j'ai fait, je lève une erreur au niveau d'une liste que je veux remplir dans une boucle for et je n'arrive pas à savoir comment résoudre ce problème :
L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection.
Nom du paramètre : index
Voici le code php :
Code : 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
17
18
19
20
21
22
23
$distanceAuxMoyennes = array();
 
for($indValeur=0; $indValeur< $nbindividus; $indValeur++)
  {
   $valeurCourante = $valeurs[$indValeur];
 
   for($indClasse=0;$indClasse<$nbClasse;$indClasse++)
      {
        $distanceAuxMoyennes[$indClasse] = pow(($moyenneParClasse[$indClasse] - $valeurCourante),2);  
      }
 
   $minDistanceAuxMoyennes = min ($distanceAuxMoyennes);
 
   $rangMinDistanceAuxMoyennes = array_search($minDistanceAuxMoyennes, $distanceAuxMoyennes);
 
   $rangClassePrecDeValeurCourante = determineClasse($indValeur,$nbClasse, $compteurClasseIterationPrec  );
 
   if($rangMinDistanceAuxMoyennes!=$rangClassePrecDeValeurCourante)
   {
    $compteurClasseIterationCourante[$rangClassePrecDeValeurCourante]--;	
    $compteurClasseIterationCourante[$rangMinDistanceAuxMoyennes] ++;
   }
}
et ce que j'ai fait en c# :
Code : 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
17
18
19
20
21
22
23
24
25
List<int> MeanDist = new List<int> ();
for ( int IndValue = 0 ; IndValue < NbData ; IndValue++ )
  {
    int CurrentValue = Data[IndValue];

    for ( int IndClass = 0 ; IndClass < NbClass ; IndClass++ )
    {
     MeanDist[IndClass] = ( (int) ( Math.Pow ( (double) ClassMean[IndClass] - (double) CurrentValue, 2 ) ) ); // j'ai déjà une erreur ici
     }

     List<int> MeanDistSort = new List<int> ( MeanDist );
     MeanDistSort.Sort ();
     int MinimumMeanDist = MeanDistSort[0];

     int IndexMinimumMeanDist = MeanDist.IndexOf ( MinimumMeanDist );

     int IndexPreviousClassCurrentValue = DetermineClass ( IndValue, NbClass, ClassCounterPreviousIteration );  // DetermineClass est une méthode

     if ( IndexMinimumMeanDist != IndexPreviousClassCurrentValue )
       {
        ClassCounterCurrentIteration[IndexPreviousClassCurrentValue]--;
        ClassCounterCurrentIteration[IndexMinimumMeanDist]++;
       }    
}
Donc en fait je n'arrive à faire en sorte que la valeur de ma liste se modifie à chaque tour.
j'ai essayé avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
MeanDist.add ( (int) ( Math.Pow ( (double) ClassMean[IndClass] - (double) CurrentValue, 2 ) ) );
mais le problème c'est qu'à chaque nouvelle itération j'ai un index qui se rajoute dans ma liste, alors que je souhaite juste modifier la valeur en fonction de l'index. En faite la taille de ma liste ne doit pas changer, c'est juste aux valeurs d'être modifiées.

J'ai utilisé des listes à la place des tableaux mais est-ce déjà la bonne solution ?
J'imagine que ce n'est pas très clair, c'est déjà pas super pour moi mais si vous aviez une idée pour me débloquer ce serait top.

Au pire, la question générale c'est comment faire pour utiliser et modifier une valeur de ma liste dans une boucle for à chaque nouvelle itération ?

En vous remerciant par avance.