我有一个文件,其中有几个数据条目由换行符分隔,每个条目都有一个日期。 知道了这个日期,我想把这些条目放在基于等效天数的列表中 - 但我只关心距当前日期7天内的日期。然后我有一个顶级列表,其中包含这7个列表,这些列表再次包含包含该特定日期的条目。
这是我到目前为止所做的:
static void Main(string[] args)
{
List<List<string>> week = new List<List<string>>(7);
List<string> day = new List<string>();
FileInfo fi = new FileInfo("TestCases.txt");
StreamReader reader = fi.OpenText();
string line;
DateTime current = DateTime.Now;
int currentday = current.DayOfYear;
while ((line = reader.ReadLine()) != null)
{
string[] data = line.Split(',');
DateTime date = DateTime.Parse(data[0]);
int dateday = date.DayOfYear;
int diff = dateday - currentday;
if (diff < 0) diff += 365;
if (diff >= 0 && diff < 7)
{
day.Add(line);
}
week.Add(day);
}
Display(week);
Console.ReadKey();
}
和我的显示功能:
static void Display(List<List<string>> list)
{
foreach (var sublist in list)
{
foreach (var value in sublist)
{
Console.Write(value);
Console.Write('\n');
}
Console.WriteLine();
}
}
这将输出所有相应的条目(在接下来的7天内发生的条目) 但它最终将所有条目添加到一个列表中,并在我的顶级列表中连续7次放置相同的列表。
我粗略地想知道从哪里开始,但我不太熟悉C#而且我一直在犯错误。谷歌一直没有帮助我。
感谢您的时间
答案 0 :(得分:1)
首先:
List<List<string>> week = new List<List<string>>(7);
for (int i = 0; i < 7; i++)
week[i] = new List<string>();
然后:
if (diff >= 0 && diff < 7)
{
week[diff].Add(line);
}
还没有测试过,但它似乎是你想要的。您应该将日期添加到您想要的星期几,而您现在正在做的是将所有日期添加到同一列表中,而不是重新创建它们而不以任何方式进行分组。
鉴于上述情况,这可能可以通过一些linq更好地解决 - 更好的意思是更清洁和可读。
编辑:
如果您将所有日期列入清单,您可以执行以下操作:
var dates = new List<DateTime>
{
DateTime.Now.AddDays(-1),
DateTime.Now.AddDays(-2),
DateTime.Now.AddDays(-3),
DateTime.Now.AddDays(-4),
DateTime.Now.AddDays(-5),
DateTime.Now.AddDays(-6),
DateTime.Now.AddDays(-7),
DateTime.Now.AddDays(-8)
};
var list = from date in dates
where (DateTime.Now - date).Days < 7
group date by date.Day;
foreach (var dateGroup in list)
{
Console.WriteLine("Date group: " + dateGroup.Key);
foreach (var date in dateGroup)
{
Console.WriteLine(date);
}
}
导致相同的输出。不列出列表内容,而是列出分组集合。更容易获得代码应该做什么。