首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >时间序列的“加入”

时间序列的“加入”
EN

Stack Overflow用户
提问于 2019-06-27 00:09:33
回答 2查看 0关注 0票数 0

我正在设计一个简单的内部框架来处理时间序列数据。鉴于LINQ是我目前的玩具锤,我想用它击中一切。

我想在类TimeSeries(Select(),Where()等)中实现方法,以便我可以使用LINQ语法来处理时间序列数据

有些事情是直截了当的,例如(从A中选择x + 10中的x),给出一个新的时间序列。

结合两个或更多时间序列的最佳语法设计是什么?(来自B中的A中的B选择a + b中的b)并不好,因为它表示嵌套循环。也许有人加入?这应该对应于隐式时间变量的连接。(我的想法与lisp'zip'功能相对应)

编辑: 一些澄清是必要的。

时间序列是一种取决于时间的函数,例如股票报价。时间序列的组合可以是两个股票价格之间的差异,作为时间的函数。

代码语言:javascript
复制
Stock1.MyJoin(Stock2, (a,b)=>a-b)

是可能的,但是可以使用一些LINQ语法巧妙地表达它吗?我期待自己实现LINQ方法class MyTimeSeries

EN

回答 2

Stack Overflow用户

发布于 2019-06-27 08:57:14

Union 听起来是正确的方法 - 没有查询表达支持,但我认为它表达了你的意思。

您可能有兴趣查看MiscUtil中基于范围的类,它可以很好地用于时间。结合一些扩展方法的乐趣,你可以做到:

代码语言:javascript
复制
foreach (DateTime day in 19.June(1976).To(DateTime.Today).Step(1.Day()))
{
    Console.WriteLine("I'm alive!");
}

我并不是说这应该取代你正在做的事情,只是你可以采取一些想法使它更整洁。随意贡献回来:)

票数 0
EN

Stack Overflow用户

发布于 2019-06-27 09:24:22

从我的NExtension项目:

代码语言:javascript
复制
public static IEnumerable<TResult> Zip<T1, T2, TResult>(
    this IEnumerable<T1> source1, 
    IEnumerable<T2> source2, 
    Func<T1, T2, TResult> combine)
{
    if (source1 == null)
        throw new ArgumentNullException("source1");
    if (source2 == null)
        throw new ArgumentNullException("source2");
    if (combine == null)
        throw new ArgumentNullException("combine");

    IEnumerator<T1> data1 = source1.GetEnumerator();
    IEnumerator<T2> data2 = source2.GetEnumerator();
    while (data1.MoveNext() && data2.MoveNext())
    {
        yield return combine(data1.Current, data2.Current);
    }
}

语法是:

代码语言:javascript
复制
Stock1.Zip(Stock2, (a,b)=>a-b)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100001296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档