根据索引比较和更新2个不同的列表

时间:2017-07-20 16:30:09

标签: c# winforms

我有两个清单:

第一个名为_listData且结构为:

public List<GraphData> _gData = new List<GraphData>();
public struct GraphData
{
    public double Temp1;
    public double Temp2;
    public DateTime Date;
    public string Type;
}

第二个数据与第一个数据同时填充(换句话说,它们将具有相同数量的行 - 这很重要因为我想使用Index):

FormA_DataType.GraphDataWithID newData2 = new FormA_DataType.GraphDataWithID();
FormA_DataType.GraphDataWithID();

public struct GraphDataWithID
{
    public int IdHeader;
    public string Type;
}

信息以这种方式填充:

FormA_DataType.GraphDataWithID newData2 = new FormA_DataType.GraphDataWithID();
FormA_DataType.GraphDataWithID();

public struct GraphDataWithID
{
    public int IdHeader;
    public string Type;
}   
if (!item.Full_File_Name.EndsWith("-B") && !item.Full_File_Name.StartsWith("Load_"))
{ 
    FormA_DataType.GraphData newData = new FormA_DataType.GraphData();
    FormA_DataType.GraphDataWithID newData2 = new FormA_DataType.GraphDataWithID();

    newData.Date = item.Time;
    newData.Temp1 = item.Start_temp;
    newData.Temp2 = item.Start_temp;
    newData.Type = item.Cycle_Type.Replace("Unknown", "");

    newData2.Type = item.Cycle_Type.Replace("Unknown", "");
    newData2.IdHeader = item.Id_Tbl_Data_Type_Ro_Header;

    _gData.Add(newData);
}

我发送了一个_gData的表格克隆,用于图表。在那里,用户将通过一些交互更改字段“type”。然后,我比较了我发送给图表的内容以及从图表中收到的内容

public bool CheckForDifferenceListInPointCycle()
{
    List<FormA_DataType.GraphData> secondNotFirst = Graph._listData.Except(_gData).ToList();

    if (secondNotFirst.Count>0) // there are differences between the lists
    {
        return true;
    }        
    return false;
}

所以,我的线条与我发送到图表的内容和我从图表中收到的内容之间存在差异。我需要在“newData2”

表中更新这些差异
  • 我知道发生了什么变化,因为我可以在“图形交互”之前和之后比较表格。有了这个差异,我应该得到这个变化的索引并使用这个索引来更新表“NewData2”。 _gData和newData2的索引是相同的。

你能想到任何帮助吗?

为了更好地理解:

  1. 我同时创建了两个列表: _gData和newData2;
  2. _gData =

    12:45:00 | 140 | 160 | “未知”

    12:45:00 | 140 | 180 | “温度”

    newData2 =

    “未知”| 45

    “温度”| 49

    1. 我将_gData发送给图表...然后我返回:
    2. _listData

      12:45:00 | 140 | 160 | “New1”

      12:45:00 | 140 | 180 | “NEW2”

      我需要根据索引更新newData2中的“New1”和“New2”。所以,我会:

      newData2 =

      “New1”| 45

      “New2”| 49

      最后,问题是:

      我需要知道如何创建循环以根据“_gData”中的信息更新表“newData2”。

      它类似于this

      private void button3_Click(object sender, EventArgs e)
      {
      
          if(CheckForDifferenceListInPointCycle())
          {
      
              foreach (var x in Graph._listData)
              {
                  var itemToChange = newData2.First(d => d.Type == x.Type).Type = x.Type;
              }
      
          }
      
      }
      

0 个答案:

没有答案