C# 如何用字典作为TValue填写分类列表
我想使用以下方法,但作为程序员爱好者,我无法理解如何填写(格式化?)将用作该方法输入的SortedList。 我有一个带有DateTime的sql表和一个始终关联“close”字符串的值(参见代码) 看了几个答案,但没有任何结论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) {
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方法,因为代码行很少。这是链接,我想这没关系,因为我没有看到任何反驳。从你的评论中,我理解我必须寻找一个更好的方法(类?)来计算布林格值。