我有一个C#项目,但我不知道使用一个值(范围从1500到-1500)与9个值的范围进行比较的最佳方法,并返回与一个值相关的两个字符串值9种可能的范围值。
到目前为止,我已经做了一些研究,我相信字典会最快做到这一点,所以我创建了一个作为示例来向您展示数据:
class MyTICKObject
{
public double MyDouble { get; set; }
public string MyString1 { get; set; }
public string MyString2 { get; set; }
}
private Dictionary<double, MyTICKObject> dictTICK = new Dictionary<double, MyTICKObject>();
int i = dictTICK.Keys.Count();
if( i == 0)
{
dictTICK.Add(1000, new MyTICKObject { MyDouble=1000, MyString1="Extreme Bullish", MyString2="DarkSeaGreen"});
dictTICK.Add(600, new MyTICKObject { MyDouble=600, MyString1="Strong Bullish", MyString2="Lime"});
dictTICK.Add(400, new MyTICKObject { MyDouble=400, MyString1="Bullish", MyString2="Green"});
dictTICK.Add(100, new MyTICKObject { MyDouble=100, MyString1="Positive", MyString2="DarkGreen"});
dictTICK.Add(0, new MyTICKObject { MyDouble=0, MyString1="Neutral", MyString2="DarkGray"});
dictTICK.Add(-100, new MyTICKObject { MyDouble=-100, MyString1="Negative", MyString2="DarkRed"});
dictTICK.Add(-400, new MyTICKObject { MyDouble=-400, MyString1="Extreme Bearish", MyString2="FireBrick"});
dictTICK.Add(-600, new MyTICKObject { MyDouble=-600, MyString1="Strong Bearish", MyString2="Red"});
dictTICK.Add(-1000, new MyTICKObject { MyDouble=-1000, MyString1="Extreme Bearish", MyString2="IndianRed"});
}
我想要做的是将传入的TICK值(201,-12,456等)与MyDouble进行比较,找到它在两个MyDouble值之间的位置,然后将MyString2返回到一个名为strStmnt的变量,并将MyString2返回给一个名为strColor的变量。
感谢您的帮助。
答案 0 :(得分:0)
不要使用字典,只需创建一个列表(如果你很乐意一次写出来就可以编写数组),因为你已经订购了它,而MyTICK对象包含了stop。然后,您可以使用while循环从上到下遍历列表,直到达到正确的范围停止值。另请注意,您已为每个停靠点定义了一组停靠点和指定的名称,但实际上您想要的名称少于停靠点,以便能够分配输入双精度值的中间值。
我已经给出了一个下面的示例,由于我提到的停止值==名称问题,它不能很好地工作,但它应该给你正确的想法。
private MyTICKObject[] list = new MyTICKObject[]
{
new MyTICKObject { MyDouble = 1000, MyString1 = "Extreme Bullish", MyString2 = "DarkSeaGreen" },
new MyTICKObject { MyDouble = 600, MyString1 = "Strong Bullish", MyString2 = "Lime" },
new MyTICKObject { MyDouble = 400, MyString1 = "Bullish", MyString2 = "Green" },
new MyTICKObject { MyDouble = 100, MyString1 = "Positive", MyString2 = "DarkGreen" },
new MyTICKObject { MyDouble = 0, MyString1 = "Neutral", MyString2 = "DarkGray" },
new MyTICKObject { MyDouble = -100, MyString1 = "Negative", MyString2 = "DarkRed" },
new MyTICKObject { MyDouble = -400, MyString1 = "Extreme Bearish", MyString2 = "FireBrick" },
new MyTICKObject { MyDouble = -600, MyString1 = "Strong Bearish", MyString2 = "Red" },
new MyTICKObject { MyDouble = -1000, MyString1 = "Extreme Bearish", MyString2 = "IndianRed" },
};
public MyTICKObject findAt(double value)
{
foreach (MyTICKObject tick in list)
{
if (value < tick.MyDouble)
{
return tick;
}
}
throw new ArgumentException("Value out of range");
}