作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近开始想在我的代码中利用 LINQ。我正在使用如下所示的 TimeSeries 类:
public struct TimeSeriesFloat
{
public DateTime[] DateTime;
public float[] Value;
}
我希望能够使用 LINQ 对“值”进行排序,并让 DateTime 数组也以保持 DateTime[i] 和 Value[i] 之间 1:1 映射的方式进行排序。
我试图在要开始的类上实现一个 IEnumerator,但我什至无法让它正常工作。所以我退后一步问自己这是否值得做,因为可能无法对一个数组进行排序同时以维护映射的并行方式对另一个数组进行排序。
这可能吗?
编辑:糟糕!我很抱歉。在我的匆忙中,我称之为一个类。这是一个结构。 :)
最佳答案
如评论中所述,我会改为使用包含 DateTime 和 float 的 TimeSeries 类:
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。
关于c# - 如何将 LINQ 与具有并行数组的类一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51795278/
我是一名优秀的程序员,十分优秀!