【发布时间】:2013-12-06 10:50:15
【问题描述】:
我有一组 PersonTimeSheet 对象,看起来像这样(简化)
public class PersonTimeSheet
{
public int Year;
public string Name;
public int Jan;
public int Feb;
public int March;
public int April;
public int May;
}
每个月字段代表该月的工作小时数。
我收集了这些我
Enumerable<PersonTimeSheet> timeSheets = GetTimeSheets();
var latestPerson = CalculateLatestPerson(timesheets);
我想找到一种优雅的方式来实现上面的 CalculateLatestPerson() 函数。 (计算最近一个月(不一定是 12 月)谁工作得最多)
例如,假设我的收藏中有 3 件物品(为了简化,只需要到 5 月)
| Name | Jan | Feb | Mar | Apr | May |
| Joe | 1 | 3 | 4 | 0 | 0 |
| Bill | 4 | 3 | 4 | 7 | 0 |
| Scott | 1 | 3 | 4 | 2 | 0 |
我希望函数返回 Bill,因为他在人们工作的“最近”月份工作得最多。
我显然需要从 12 ==> 开始的某种类型的循环,但由于我的字段是月份名称而不是整数,我想看看是否有一种优雅的方式来编写这个函数。
【问题讨论】:
-
你能修改你的类吗?使用
Dictionary<int,int>或类似的值来存储每个月的整数表示形式的值(即使是int[]也会这样做,因为一年中的月数不会经常变化:))。然后,您可以使用现有属性返回适当的值。会更容易查询 -
您没有在示例中指定“最近一个月”。无论如何它应该成为一个参数。 5 月每个人都有 0 小时。
-
@RGraham - 请注意,有些日历的月数是可变的。这甚至更需要移动到几个月的字典。
-
@ErnodeWeerd 也许吧。但是,如果他将年份表示为强类型变量,我们可以放心地假设他不会
标签: c# linq collections