代码之家  ›  专栏  ›  技术社区  ›  JamesHoux

如何将LINQ与具有并行数组的类一起使用?

  •  3
  • JamesHoux  · 技术社区  · 6 年前

    public struct TimeSeriesFloat
    {
        public DateTime[] DateTime;
        public float[] Value;
    }
    

    我希望能够使用LINQ对“Value”进行排序,并让DateTime数组也以维护DateTime[I]和Value[I]之间1:1映射的方式进行排序。

    我试图在类上实现一个IEnumerator来启动,但我甚至无法在没有错误的情况下让它工作。于是我退后一步,问自己是否值得这么做,因为在一个数组上排序可能不可能同时以维护映射的并行方式对另一个数组排序。

    有可能吗?

    编辑:汪汪!我很抱歉。在匆忙中,我把它称为一门课。这是一个结构。:)

    1 回复  |  直到 6 年前
        1
  •  4
  •   Ňɏssa PøngjÇ£rdenlarp    6 年前

    如注释中所述,我将改为一个TimeSeries类,它包含一个DateTime和一个float:

    public struct TimeSeries
    {
      public DateTime DateTime;
      public float Value;
    }
    

    如果出于任何原因,您必须从您拥有的结构开始,那么您可以将它变成这样的IEnumerable:

    var tsf = timeSeriesFloat.DateTime
        .Zip(tsf.Value, (f, s) => new {DateTime=f,Value=s});
    

    这将创建一个IEnumerable。然后可以说按值排序:

    您还可以对它执行其他类型的Linq操作,如果您愿意,可以使用已排序(筛选,…)的数据创建一个新的TimeSeriesFloat。