如何将 LINQ 与具有并行数组的 class 一起使用?
How can I use LINQ with a class that has parallel arrays?
我最近开始想在我的代码中利用 LINQ。我正在使用如下所示的 TimeSeries class:
public struct TimeSeriesFloat
{
public DateTime[] DateTime;
public float[] Value;
}
我希望能够使用 LINQ 对 "Value" 进行排序,并让 DateTime 数组也以维护 DateTime[i] 和 Value[i] 之间的 1:1 映射的方式进行排序].
我试图在 class 上实现一个 IEnumerator 来开始,但我什至无法让它正常工作。所以然后我退后一步问自己是否值得这样做,因为可能无法对一个数组进行排序同时以维护映射的并行方式对另一个数组进行排序。
可能吗?
编辑:糟糕!我很抱歉。在我的匆忙中,我称它为 class。这是一个结构。 :)
如评论中所述,我会改为包含 DateTime 和浮点数的 TimeSeries class:
public struct TimeSeries
{
public DateTime DateTime;
public float Value;
}
然后您将拥有这些集合(无论是数组、列表还是任何 IEnumerable),您可以对其执行所有类型的 Linq 操作。 (这也是您从数据库中获得的数据,看起来像用成员作为列对单行建模)。
如果出于某种原因你必须从你拥有的结构开始,那么你可以像这样将它变成一个 IEnumerable:
var tsf = timeSeriesFloat.DateTime
.Zip(tsf.Value, (f, s) => new {DateTime=f,Value=s});
这将创建一个 IEnumerable。然后你可以说 sort on Value:
var sortedByValue = tsf.OrderBy( x => x.Value);
并且您可以对其执行其他类型的 Linq 操作,并且如果您愿意,可以使用已排序(过滤,...)的数据创建一个新的 TimeSeriesFloat。
我最近开始想在我的代码中利用 LINQ。我正在使用如下所示的 TimeSeries class:
public struct TimeSeriesFloat
{
public DateTime[] DateTime;
public float[] Value;
}
我希望能够使用 LINQ 对 "Value" 进行排序,并让 DateTime 数组也以维护 DateTime[i] 和 Value[i] 之间的 1:1 映射的方式进行排序].
我试图在 class 上实现一个 IEnumerator 来开始,但我什至无法让它正常工作。所以然后我退后一步问自己是否值得这样做,因为可能无法对一个数组进行排序同时以维护映射的并行方式对另一个数组进行排序。
可能吗?
编辑:糟糕!我很抱歉。在我的匆忙中,我称它为 class。这是一个结构。 :)
如评论中所述,我会改为包含 DateTime 和浮点数的 TimeSeries class:
public struct TimeSeries
{
public DateTime DateTime;
public float Value;
}
然后您将拥有这些集合(无论是数组、列表还是任何 IEnumerable),您可以对其执行所有类型的 Linq 操作。 (这也是您从数据库中获得的数据,看起来像用成员作为列对单行建模)。
如果出于某种原因你必须从你拥有的结构开始,那么你可以像这样将它变成一个 IEnumerable:
var tsf = timeSeriesFloat.DateTime
.Zip(tsf.Value, (f, s) => new {DateTime=f,Value=s});
这将创建一个 IEnumerable。然后你可以说 sort on Value:
var sortedByValue = tsf.OrderBy( x => x.Value);
并且您可以对其执行其他类型的 Linq 操作,并且如果您愿意,可以使用已排序(过滤,...)的数据创建一个新的 TimeSeriesFloat。