繁体   English   中英

C#比较双精度值和一系列值并返回两个文本值的最佳方法是什么

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM