【问题标题】:How to compare these arrays in C#, and return values which are equal如何在 C# 中比较这些数组,并返回相等的值
【发布时间】:2015-01-25 23:21:43
【问题描述】:

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

我们将不胜感激!

【问题讨论】:

  • 对于初学者来说,你不需要一个 jaggedArray。当你做 line.Split(' ') 时,无论如何你都会得到一个 string[] 。你不需要 ToArray()).ToArray()
  • 在下面的C# Stackoverflow File.ReadAllLines 上做一个快速的谷歌搜索,你可以看到许多关于如何使用string.Split() 方法的例子

标签: c# arrays compare


【解决方案1】:

有几种方法可以解决这个问题。但我建议引入一些类型化的类来帮助你。也许从一个名为约会的简单类开始:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2021-11-04
    相关资源
    最近更新 更多