C# 嵌套列表,基于日期值向列表动态添加字符串
我有一个文件,其中有几个数据条目,用换行符分隔,每个条目都有一个日期。 知道这个日期后,我想将这些条目放在一个基于等效日期的列表中——但我只关心距离当前日期7天以内的日期。然后,我有一个顶级列表,其中包含这7个列表,其中再次包含包含该特定日期的条目 以下是我到目前为止的情况:C# 嵌套列表,基于日期值向列表动态添加字符串,c#,C#,我有一个文件,其中有几个数据条目,用换行符分隔,每个条目都有一个日期。 知道这个日期后,我想将这些条目放在一个基于等效日期的列表中——但我只关心距离当前日期7天以内的日期。然后,我有一个顶级列表,其中包含这7个列表,其中再次包含包含该特定日期的条目 以下是我到目前为止的情况: static void Main(string[] args) { List<List<string>> week = new List<List<str
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 Main(字符串[]args)
{
列表周=新列表(7);
列表日=新列表();
FileInfo fi=newfileinfo(“TestCases.txt”);
StreamReader=fi.OpenText();
弦线;
DateTime current=DateTime.Now;
int currentday=当前的年日期;
而((line=reader.ReadLine())!=null)
{
string[]data=line.Split(',');
DateTime date=DateTime.Parse(数据[0]);
int dateday=date.DayOfYear;
int diff=日期日-当前日;
如果(diff<0)diff+=365;
如果(差异>=0&&diff<7)
{
添加(行);
}
周。添加(天);
}
显示(周);
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();
}
}
静态无效显示(列表)
{
foreach(列表中的var子列表)
{
foreach(子列表中的var值)
{
控制台。写入(值);
Console.Write('\n');
}
Console.WriteLine();
}
}
这将输出所有适当的条目(在未来7天内出现的条目)
但它最终将所有条目添加到一个列表中,并将相同的列表在我的顶级列表中连续7次
我大致知道从这里可以取得什么进展,但我对C#不太熟悉,而且我经常出错&谷歌对我帮助不大
首先感谢您抽出宝贵的时间:
List<List<string>> week = new List<List<string>>(7);
for (int i = 0; i < 7; i++)
week[i] = new List<string>();
列表周=新列表(7);
对于(int i=0;i<7;i++)
周[i]=新列表();
然后:
if(diff>=0&&diff<7)
{
周[diff]。添加(行);
}
还没有测试过,但它似乎是你想要的。您应该将日期添加到所需的星期几,现在您要做的是将所有日期添加到同一个列表中,而不是重新创建它们,也不是以任何方式进行分组
鉴于上述情况,使用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);
}
}
var日期=新列表
{
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)
};
变量列表=日期中的起始日期
其中(DateTime.Now-date).Days<7
按日期分组日期。天;
foreach(列表中的var日期组)
{
Console.WriteLine(“日期组:+dateGroup.Key”);
foreach(日期组中的var日期)
{
控制台写入线(日期);
}
}
产生相同的输出。不是列表中的列表,而是分组的集合。更容易获得代码应该执行的操作。非常接近(int i=0;i<7;i++)周。添加(new List());最后工作了。谢谢非常感谢linq编辑!自从你提到它以来,我已经了解了更多,但是谢谢你花时间和精力给我一个适用的例子。如果我有15个名声,我会认为你很有帮助:3很高兴我能帮上忙。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);
}
}