none
有没有一个好的方法表示这种数据结构? RRS feed

  • 问题

  • 有这样一个结构:

    A:100  80  70  60  50  40  20

    B:97  85  84  80  70  60  30

    B的值是由A的值决定的。A=20的话,B就一定等于30。若都不等于,就看A的范围。若是40<A<50。B就取60-70之间的一个随机数。if-else可以实现。但太多这样的语句了。请问有没有什么好的数据结构或者方法可以较好的解决这类问题?


    勿以恶小而为之,勿以善小而不为
    2010年7月2日 9:40

答案

  • 自己回答吧。我现在用的是SortedDictionary。思路:每次按照A的值查找时,若A的值在字典中存在,就直接输出。如果不存在,就看A在字典中的范围。然后生产一个B的值。加入字典。代码如下:

    class Dict
        {
            public static SortedDictionary<int, double> dict;
            public static void initialsao2()
            {
                dict = new SortedDictionary<int, double>();
                int[] keyarray = { 20, 40, 50, 60, 70, 80, 100 };
                double[] valuearray = { 30, 60, 70, 80, 84, 85, 97 };
                for (int i = 0; i < keyarray.Length; i++)
                {
                    dict.Add(keyarray[i], valuearray[i]);
                }
            }

            public static void printdict()
            {
                foreach (KeyValuePair<int,double> kvp in dict)
                {
                    Console.WriteLine("key:{0},value:{1}", kvp.Key, kvp.Value);
                }
            }

            public static double searchvalue(int key)
            {
                if (dict.ContainsKey(key))
                {
                    return dict[key];
                }
                else
                {
                    return addnewvalue(key);
                } 
            }

            private static double addnewvalue(int key)
            {
                SortedDictionary<int, double>.KeyCollection keycoll = dict.Keys;
                int small = 0,big=0;
                foreach (int value in keycoll)
                {
                    if (key > value)
                    {
                        small = value;
                    }
                    else
                    {
                        big = value;
                        break;
                    }
                }
                Random rand=new Random();
                double newvalue = rand.Next((int)dict[small], (int)dict[big]);
                dict.Add(key, newvalue);
                return newvalue;
               
            }
        }

     


    勿以恶小而为之,勿以善小而不为
    • 已标记为答案 dut60 2010年7月7日 9:00
    2010年7月3日 6:33

全部回复

  • 自己回答吧。我现在用的是SortedDictionary。思路:每次按照A的值查找时,若A的值在字典中存在,就直接输出。如果不存在,就看A在字典中的范围。然后生产一个B的值。加入字典。代码如下:

    class Dict
        {
            public static SortedDictionary<int, double> dict;
            public static void initialsao2()
            {
                dict = new SortedDictionary<int, double>();
                int[] keyarray = { 20, 40, 50, 60, 70, 80, 100 };
                double[] valuearray = { 30, 60, 70, 80, 84, 85, 97 };
                for (int i = 0; i < keyarray.Length; i++)
                {
                    dict.Add(keyarray[i], valuearray[i]);
                }
            }

            public static void printdict()
            {
                foreach (KeyValuePair<int,double> kvp in dict)
                {
                    Console.WriteLine("key:{0},value:{1}", kvp.Key, kvp.Value);
                }
            }

            public static double searchvalue(int key)
            {
                if (dict.ContainsKey(key))
                {
                    return dict[key];
                }
                else
                {
                    return addnewvalue(key);
                } 
            }

            private static double addnewvalue(int key)
            {
                SortedDictionary<int, double>.KeyCollection keycoll = dict.Keys;
                int small = 0,big=0;
                foreach (int value in keycoll)
                {
                    if (key > value)
                    {
                        small = value;
                    }
                    else
                    {
                        big = value;
                        break;
                    }
                }
                Random rand=new Random();
                double newvalue = rand.Next((int)dict[small], (int)dict[big]);
                dict.Add(key, newvalue);
                return newvalue;
               
            }
        }

     


    勿以恶小而为之,勿以善小而不为
    • 已标记为答案 dut60 2010年7月7日 9:00
    2010年7月3日 6:33
  • 楼主问什么不试试将a和b放入字典中,先用字典类Dictionary<A的值, B的值>

    使用条件判断A的值或他的取值范围,然后得到B的值

    2010年7月6日 1:51
  • 在A不重复的情况下,我同意使用Dictionary<int,int>方法,加之一些简单的if判断进行操作。

    如果允许A重复,此情况下你自定义一个结构:

    struct KeyPair
    {
       public int A{get;set;}
       public int B{get;set;}
    }

    然后放到一个List<KeyPair>里边操作。

    2010年7月6日 2:31
    版主
  • 我就是这样做的啊?
    勿以恶小而为之,勿以善小而不为
    2010年7月7日 8:59