![](/img/trans.png)
[英]What is the best way to recognize and convert these “minimum” double values into C# Double.MinValue?
[英]C# What is the best way to compare a double value to a range of values and return two text values
我有一个使用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的变量。
谢谢您的帮助。
无需使用字典,只需创建一个列表(或数组,如果您愿意一次将其全部写入即可),因为您已经对其进行了排序,并且MyTICK对象包含了停止符。 然后,您可以使用while循环从上至下遍历列表,直至达到正确的范围停止值。 还应注意,您已经定义了一组停止点,并为每个停止点指定了名称,但实际上,您想要的名称比停止点少,以便能够分配输入double的中间值。
我在下面给出了一个示例,由于我提到的stop-values ==名称问题,该示例无法很好地工作,但它应该为您提供正确的想法。
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");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.