最近,我开始想在代码中使用LINQ。我使用的TimeSeries类如下所示:
public struct TimeSeriesFloat
{
public DateTime[] DateTime;
public float[] Value;
}我希望能够使用LINQ对“值”进行排序,并使DateTime数组也得到排序,以维护DateTimei和Valuei之间的1:1映射。
我试图在类上实现一个要启动的IEnumerator,但我甚至无法在没有错误的情况下使其工作。然后我后退一步,问自己是否值得这样做,因为可能不可能对一个数组进行排序,也不可能对另一个数组进行并行排序,以维护映射。
有可能吗?
编辑:喔!我很抱歉。我匆匆忙忙地把它叫做一门课。是个结构体。::)
发布于 2018-08-11 00:48:20
正如注释中提到的那样,我将使用一个TimeSeries类来保存一个DateTime和一个浮点:
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。然后,您可以对值进行排序:
var sortedByValue = tsf.OrderBy( x => x.Value);
您可以对它执行其他类型的Linq操作,如果您愿意,可以使用排序(筛选,.)创建一个新的TimeSeriesFloat。数据。
https://stackoverflow.com/questions/51795278
复制相似问题