列表中的对象知道有关该列表的统计信息

时间:2009-11-04 19:41:48

标签: c#

为了论证,我有人物对象

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);
  }
}

由于 标记

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

您可以使用Linq:

  1. 计算平均值(.Average() - 扩展方法)
  2. 计算与平均年龄的百分比距离
  3. 选择指定范围

答案 2 :(得分:0)

制作个人名单,将其自身添加为对此人的引用,以便此人可以查询列表的内容/统计信息