如何从 foreach 循环中将双精度值附加到 2D 数组,并访问前一个索引?

Posted

技术标签:

【中文标题】如何从 foreach 循环中将双精度值附加到 2D 数组,并访问前一个索引?【英文标题】:How to appending double values to 2D Array, with access to previous index, from within foreach loop? 【发布时间】:2021-06-17 22:24:05 【问题描述】:

我有一个名为stockGains 的空二维数组,我试图将gains 的值(nextPrice/currentPrice 的值)附加到其中,但我似乎无法在 C# 中找到合适的运算符或方法能够附加到我的二维数组并完成我的循环?目前,我错误地使用了.Add 来举例。二维数组stockGains 应该是动态大小的。

double[,] stockGains = ;
   
foreach (double currentPrice in pricesMonth1AsList)

    // divide the nextPrice by currentPrice
    double gains = ((currentPrice+1)/currentPrice);

    // append the result to stockGains
    stockGains.Add(gains);

    // do this on repeat for every day of the month until the end of pricesMonth1Aslist
 

我已将要迭代的历史价格数据存储为 List<double>,称为 pricesMonth1AsList,其中每个 currentPrice 从第 1 天到第 30 天按顺序存储为双精度数(您可以将列表的索引位置视为(day of the month - 1).nextPrice 是第二天的价格值(我在指数位置表示为currentPrice+1)示例数据示例如下:

20.35, 30.5, 40.2, 50 代表第 1 天 [0]、第 2 天 [1]、第 3 天 [2]、第 4 天 [3] 等

例如,要计算的第一个增益是30.5/20.35,然后这个值将作为第一个值存储在二维数组的索引0中,第二个值是40.2/20.35,第三个值是@ 987654337@ 也存储在 stockGains 的索引 0 中,直到该月的最后一天。然后再次重复该过程,但从第 2 天开始,即40.2/30.5, 50/30.5 etc 收益将存储在 stockGains 的索引 1 中。

最终目标是在最后的二维数组中找到单个最大增益值。

【问题讨论】:

这能回答你的问题吗? Adding values to a C# array 您好,这些对您有帮助吗? 要处理二维数组的维度,您可以将其处理为: (stockGains[0,0] 表示第一个值,stockGains[0,1] 表示第二个值第一个 stockGains 索引。对于每个后续索引,它将是 [1,0],[1,1],...等。但是您必须前后复制数组才能添加它们。元组可能是更好的方法处理值。 【参考方案1】:

我不确定这是否能回答您的问题;我调整了你的循环以能够访问前一个元素,这就是我使用for的原因。

我相信使用Tuple<Tx,Ty> 会更容易(这是我的偏好)

从中创建一个List<>,您将拥有一个Add

var pricesMonth1AsList = new List<double>()

    0,1,2,3,4,5
;

//init
var list2D = new List<Tuple<double,double>>();
for (int i = 1; i < pricesMonth1AsList.Count; i++) 
    //calculate your values

    //since I did not understand the calculation,
    //here's just a dummy one
    var currentValue = pricesMonth1AsList[i];
    var previousValue = pricesMonth1AsList[i-1];
    
    double a = previousValue/currentValue;
    double b = i;

    //and add it as such
    list2D.Add(new Tuple<double,double>(a,b));


foreach(var item in list2D)

    Console.WriteLine($"item.Item1 - item.Item2");  

输出:

0 - 1
0.5 - 2
0.6666666666666666 - 3
0.75 - 4
0.8 - 5

【讨论】:

您好,由于我不清楚您要进行什么计算,所以我将由您决定。我提供了一种访问数组中先前项目的方法,并提供了一种使用元组列表修改二维数组的方法。我希望它有所帮助。如果没有,我会删除我的答案。 嗨 Stefan,感谢您的回复,尽管我相信您误解了,您的数据集也不是最好的例子,因为 1/0 会引发错误。为了更清楚地使用您的示例 pricesMonth1AsList 数据,for 循环中的过程应该是:以第 3 天为例,这将是:2/1 ----> 2(附加到 stockGains)3/1 ----> 3(追加到stockGains)4/1 ----> 4(追加到stockGains)等等。基本上我想将接下来的几天价格除以前一天,以计算该月每一天每个价格的可能收益. 嗨 Stefan,我还没有机会尝试你的方法。请查看我的最新评论,今晚我将采纳您的建议。谢谢。

以上是关于如何从 foreach 循环中将双精度值附加到 2D 数组,并访问前一个索引?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 stringstream 在 C++ 中将字符串转换为双精度值 [关闭]

如何在 PySpark 1.6 中将 DataFrame 列从字符串转换为浮点/双精度?

如何在 .NET 中将双精度值转换为具有固定小数位数的小数类型值

如何在 C++ 中将字符串转换为双精度值?

如何将双精度值从 json 转换为函数

在 C# 中将十进制数转换为双精度数会产生差异