2009-11-04 3 views
0

Par souci d'argument que j'ai personne ObjetsAvoir un objet dans une liste connaître des informations statistiques sur cette liste

public class Person 
{ 
    public int Age { get; set; } 
    public string Name { get; set; } 
} 

je dois avoir une liste ou quelque chose de similaire où chaque personne peut dire si elles sont plus ou plus jeune que l'âge moyen. (Idéalement, je veux dire top 10% et bottom 10%) mais je vais me contenter de la médiane.

Existe-t-il un moyen de le faire?

List<Person> people = new List<Person>(); 
//Fill People 
foreach(var person in people) 
{ 
    if (person.TopTenPercent) 
    { 
    Console.WriteLine(person.Name); 
    } 
} 

Merci Mark

Répondre

2

Vraiment, vous devriez avoir la liste ou quelque chose d'autre résumer ces informations (SRP et tout cela). Donc, dire que vous avez

class People : IEnumerable<Person> { 
    public double MedianAge { get; } 
    // etc. 
} 

Ensuite, vous diriez

foreach(var person in people.Where(p => p.Age >= people.MedianAge)) { 
    Console.WriteLine(person.Name); 
} 

Pour le cas général, vous pouvez avoir une méthode PercentileAge de votre classe People:

public double PercentileAge(double percentile) 
0

Vous pouvez utiliser LINQ:

  1. Calculer la même moyenne (.Average() -Extension méthode)
  2. Compute distance percentual à l'âge moyen
  3. Sélectionnez plage spécifiée
+0

Connaître la moyenne ne vous aide pas à calculer les centiles. – jason

0

Faire un PersonList qui ajoute une référence à la personne afin que la personne peut demander Contenu de la liste/stats

Questions connexes