2009-11-04 38 views
0

对于参数的缘故统计信息,我有Person对象有列表中的一个对象知道该名单

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

我需要有一个列表或者类似的东西,每个人都可以告诉我们,如果他们年纪大了或比平均年龄小。 (理想情况下,我想说的是前10%和最后10%),但我会在中位数下结算。

有没有办法做到这一点?

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

感谢 马克

回答

2

真的,你应该有列表或其他封装此信息(SRP和所有)。所以说,你有

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

然后你会说

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

对于一般情况下,你可以有一个PercentileAge方法您People类:

public double PercentileAge(double percentile) 
0

您可以使用LINQ:

  1. 计算平均(.Average() -extension法)
  2. 计算的平均年龄
  3. percentual的距离选择指定范围
+0

了解平均值并不能帮助您计算百分位数。 – jason 2009-11-04 19:48:38

0

做一个personlist,增加了本身的人,这样的人可以查询参考列表的内容/统计信息

相关问题