Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何用字典作为TValue填写分类列表_C#_Dictionary_Sortedlist - Fatal编程技术网

C# 如何用字典作为TValue填写分类列表

C# 如何用字典作为TValue填写分类列表,c#,dictionary,sortedlist,C#,Dictionary,Sortedlist,我想使用以下方法,但作为程序员爱好者,我无法理解如何填写(格式化?)将用作该方法输入的SortedList。 我有一个带有DateTime的sql表和一个始终关联“close”字符串的值(参见代码) 看了几个答案,但没有任何结论 public static void AddBollingerBands(ref SortedList<DateTime, Dictionary<string, double>> data, int period, int factor) {

我想使用以下方法,但作为程序员爱好者,我无法理解如何填写(格式化?)将用作该方法输入的SortedList。 我有一个带有DateTime的sql表和一个始终关联“close”字符串的值(参见代码)

看了几个答案,但没有任何结论

public static void AddBollingerBands(ref SortedList<DateTime, Dictionary<string, double>> data, int period, int factor)
{
    double total_average = 0;
    double total_squares = 0;

    for (int i = 0; i < data.Count(); i++)
    {
        total_average += data.Values[i]["close"];
        total_squares += Math.Pow(data.Values[i]["close"], 2);

        if (i >= period - 1)
        {
            double total_bollinger = 0;
            double average = total_average / period;

            double stdev = Math.Sqrt((total_squares - Math.Pow(total_average,2)/period) / period);
            data.Values[i]["bollinger_average"] = average;
            data.Values[i]["bollinger_top"] = average + factor * stdev;
            data.Values[i]["bollinger_bottom"] = average - factor * stdev;
.......
......
public static void addbollingerband(参考分类列表数据、整数周期、整数系数)
{
两倍总平均值=0;
两倍总平方=0;
对于(int i=0;i=时段-1)
{
两倍总波林格=0;
双平均值=总平均值/周期;
双标准偏差=数学Sqrt(总平方-数学功率(总平均值,2)/周期)/周期);
数据.数值[i][“bollinger_average”]=平均值;
数据值[i][“bollinger_top”]=平均值+系数*stdev;
数据值[i][“bollinger_bottom”]=平均系数*stdev;
.......
......

使用.Values只是一个get操作。结果不是对排序列表中元素的引用,而是一个不可变的var

忽略未正确使用SortedList的问题,只有通过其键直接引用元素时,才能更改SortedList的值:

data[keyValue]["total_bollinger"] = average;
上面的代码行将相应地更新列表中的该值

与通过data.Count()迭代列表不同,我建议对键进行如下迭代:

            var keys = data.Keys;
            foreach(var key in data.Keys)
            {
                double total_bollinger = 0;
                double average = total_average / period;

                double stdev = Math.Sqrt((total_squares - Math.Pow(total_average, 2) / period) / period);
                data[key]["total_bollinger"] = total_average;
            }

你在尝试这样做时遇到了什么问题?字典和分类列表似乎都不是Bollinger Band数据的正确选择。我会使用按日期排序的类和集合。我从谷歌搜索后得到的其他方法中选择了这个Bollinger Bands方法,因为代码行很少。这是链接,我想这没关系,因为我没有看到任何反驳。从你的评论中,我理解我必须寻找一个更好的方法(类?)来计算布林格值。