嵌套列表,根据日期值动态地将字符串添加到列表中

本文关键字:列表 字符串 添加 日期 嵌套 动态 | 更新日期: 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);
    }
}

导致相同的输出。不是列表中的列表,而是分组的集合。更容易理解代码应该做什么