gpt4 book ai didi

c# - 创建时间序列列表

转载 作者:太空宇宙 更新时间:2023-11-03 23:01:01 24 4
gpt4 key购买 nike

我需要创建一个包含 10 个 MeasureType(1 到 10)的 200 个观察值的时间序列,并将所有内容加入一个列表(使用 C# 7):

var a = Enumerable.Range(1, 200).Select(x => new Measure { MeasureTypeId = 1, Created = DateTime.Now.AddDays(x), Value = (Decimal)(80 * random.NextDouble() + 40) });

var b = Enumerable.Range(1, 200).Select(x => new Measure { MeasureTypeId = 2, Created = DateTime.Now.AddDays(x), Value = (Decimal)(20 * random.NextDouble() + 30) });

// Other measures

var result = a.Union(b).Union(c). ...

测量之间的变化是增量的 MeasureId 和参数(80 和 40)到(20 和 30)到 ...

有没有办法简化这段代码?

最佳答案

使用带有元组数组(或列表)或自定义类型的 for 循环来保存参数,如下所示:

var result = Set.Empty; // Or whatever you use

Tuple<int, int>[] params = {
new Tuple<int, int>(80, 40),
new Tuple<int, int>(20, 30),
// and so on
}

for(int i = 0; i < N; i++) {
result.Union(Enumerable.Range(1, 200).Select(x => new Measure { MeasureTypeId = i + 1, Created = DateTime.Now.AddDays(x), Value = (Decimal)(params[i].Item1 * random.NextDouble() + params[i].Item2) }));
}

// LINQ version
var result = Enumerable.Range(1, N).SelectMany(x => Enumerable.Range(1, 200), (t, n) => new Measure {
MeasureTypeId = t,
Created = DateTime.Now.AddDays(n),
Value = (decimal)(params[t - 1].Item1 * random.NextDouble() + params[t - 1].Item2)
});

如果需要,您可以使用 C# 7 的加糖元组语法,我还不太熟悉它。

如果您的参数是一个系列的一部分,您可以完全跳过这些元组。

@ChrisPickford's answer 借用和修改的 LINQ 版本.

关于c# - 创建时间序列列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43068003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com