我正在尝试使用C#创建一个可用于根据不同人群可用性安排会议的程序。目前它将获取用户数据并将其放入文本文件中,示例行将显示为“Name 01/01/2000 11”,并且将有多行。我想我已经设法将它读入数组,虽然我不确定如何测试这个(例如将数组输出到标签?)现在需要比较日期和时间并输出日期和时间这是平等的。以下是一些代码执行此操作似乎执行正常并更新文件:
System.IO.StreamWriter file = new System.IO.StreamWriter(@"Times.txt", true);
file.WriteLine(lineForFile);
file.Close();
string[] lines = File.ReadAllLines(@"Times.txt");
string[][] jaggedArray = lines.Select(line => line.Split(' ').ToArray()).ToArray();
非常感谢帮助!
答案 0 :(得分:0)
有几种方法可以解决这个问题。但我建议你介绍一些打字类来帮助你。也许从一个名为约会的简单类开始:
public class Appointment
{
private Appointment(string name, DateTime app, int id)
{
Name = name;
Time = app;
Id = id;
}
public string Name {get ; private set;}
public DateTime Time{get; private set;}
public int Id{get ;private set;} // Not sure if the 11 was an id or the time in your example.
public static Create(string name, DateTime app, int id)
{
return new Appointment(name,app, id);
}
}
本课程将帮助您处理数据。因此,现在您可以从数据层返回约会列表,并从分隔字符串列表中创建每个约会的新实例(如果必须使用文件进行存储,可以查看使用空格以外的其他内容来分隔数据(可能是管道或逗号,。)。另一种选择是使用db或xml格式。
IList<Appointment> appointemts = File.ReadAllLines(@"Times.txt").Select(v => {var row = v.Split(' '); return Appointment.Create(row[0],DateTime.parse(row[1]),int.parse(row[2]);}).ToList();
现在您可以使用类型来应用一些查询逻辑:
从这里开始,可以使用linq小组获取人们预约的明确日期列表:
var appointmentsByDate = from a in appointments
group a by a.Time into g
select new {Time = g.key, Appointments= g.ToList()};
您现在拥有一个字典,其中包含约会时间的密钥和一个值,该值是该日期/时间的约会列表。从这里你可以做一个简单的查询来识别冲突,这基本上是任何有多个约会的列表时间。
var conflicts = appointmentsByDate.Where(a => a.Appointments.Count > 1);