嵌套列表,根据日期值动态地将字符串添加到列表中
本文关键字:列表 字符串 添加 日期 嵌套 动态 | 更新日期: 2023-09-27 18:16:00
我有一个文件,其中有几个用换行符分隔的数据条目,每个条目都有一个日期。知道了这个日期,我想将这些条目放入一个基于等效天数的列表中——但我只关心距离当前日期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#不太熟悉,我一直得到错误& &;谷歌对我帮助不大。
感谢您的宝贵时间
First:
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);
}
}
导致相同的输出。不是列表中的列表,而是分组的集合。更容易理解代码应该做什么