Question

J'ai un tableau à double [] tenant beaucoup de chiffres.

I ai un algorithme qui sélectionne à partir des sections dans le tableau qui tombent sous certaines conditions (valeur supérieure à x, les valeurs d'au moins y, etc.)

Maintenant, je veux calculer la valeur moyenne de toutes ces valeurs dans ma section.

Alors, dites ma section est de l'indice 20 à 40. Maintenant, j'ai 20 valeurs. Est-il un moyen facile de le faire en C # ou dois-je faire une boucle sur mon tableau et calculer la moyenne à la main?

Était-ce utile?

La solution

var values = new[] { 1, 2, 3, 4, 5, 6, 7, 8 };
var average = values.Skip(2).Take(5).Average();

Autres conseils

Utilisation Linq:

var myList = new double[] {1,2,3}
var avg = myList.Where(i => i > 1 && i < 2).Avg();

Notez que si vous avez les numéros avec index 20 à 40, vous n'avez pas 20 numéros, vous avez 21 numéros.

Vous pouvez utiliser la méthode Range pour créer un IEnumerable pour les index, vous pouvez utiliser la méthode de la moyenne pour obtenir la moyenne des chiffres:

double average = Enumerable.Range(20, 21).Select(i => numbers[i]).Average();
double avg = array
    .Skip(startIndex)
    .Take(endIndex - startIndex + 1)
    .Average();

Utilisez Enumerable.Average :

double[] values = new[] { 1.0, 2.0, 3.14, 2.71, 9.1 };
double average = values.Where(x => x > 2.0 && x < 4.0).Average();

Par conséquent, pour utiliser avec vos méthodes de sélection, vous devriez envisager d'avoir ces méthodes renvoient IEnumerable<double>. Ainsi, à titre d'exemple:

public IEnumerable<double> GreaterThan(double[] values, double value) {
    for(int i = 0; i < values.Length; i++) {
        if(values[i] > value) {
            yield return values[i];
    }
}

Alors:

// values is double[]
double average = GreaterThan(values, 2.0).Average();

Vous pouvez même faire ce qui précède une méthode d'extension afin qu'il se lise bien:

double average = values.GreaterThan(2.0).Average();

Je vous encourage à écrire vos méthodes de filtrage pour revenir IEnumerable<double>.

Vous pouvez utiliser le saut et prendre des méthodes de LINQ pour choisir des indices particuliers:

var myData = new double[] { ..... };
var average = myList.Skip(20).Take(21).Average();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top