如何在C#中比较这些数组,并返回相等的值

时间:2015-01-25 23:21:44

标签: c# arrays compare

我正在尝试使用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();

非常感谢帮助!

1 个答案:

答案 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);