根据一个二维字符串的数组:string[,] ss = new string[5, 3],以ss[0,0]的日期为准,求出属于该日期的本周以内的工作日(周一至周五,数组中是不会有存在周六、日的数据的)的以下两个数据:
一、ss[X,1]这列数据的本周第一个开始的日期的B值;
二、ss[X,2]这列数据的最高值。假设有以下两个二维数组进行举例说明一下:
string[5, 3] ss1
[0, 0] "2011-04-15"
[0, 1] "8.20"
[0, 2] "8.35"
[1, 0] "2011-04-14"
[1, 1] "8.30"
[1, 2] "8.30"
[2, 0] "2011-04-13"
[2, 1] "8.20"
[2, 2] "8.31"
[3, 0] "2011-04-12"
[3, 1] "8.13"
[3, 2] "8.33"
[4, 0] "2011-04-11"
[4, 1] "8.51"
[4, 2] "8.54" 根据ss1的数据,求得本周的结果的两个数据是:最高值是ss1[4, 2]=8.54,B值是2011-04-11的ss1[4, 1]=8.51
温馨提示:本周五个工作日的数据都有。string[5, 3] ss2
[0, 0] "2011-04-15"
[0, 1] "11.91"
[0, 2] "12.21"
[1, 0] "2011-04-14"
[1, 1] "11.90"
[1, 2] "12.01"
[2, 0] "2011-04-13"
[2, 1] "11.82"
[2, 2] "12.29"
[3, 0] "2011-04-12"
[3, 1] "11.90"
[3, 2] "12.36"
[4, 0] "2011-04-08"
[4, 1] "11.68"
[4, 2] "11.85" 根据ss2的数据,求得本周的结果的两个数据是:最高值是ss2[3, 2]=12.36,B值是2011-04-12的ss2[3, 1]=11.90。
温馨提示:2011-04-08不是属于2011-04-15日期的本周以内的数据,而本周只有四天的数据。望诸位高手帮忙想一个最佳算法,谢谢!

解决方案 »

  1.   

    可以考虑把数据变成DataTable放进内存,但好像没啥区别吧?不也是要循环DataTable的数据吗?
      

  2.   


                DateTime dt = DateTime.Parse(ss[0, 0]);
                DateTime[] temp = new DateTime[5];
                for (int i = 0; i < 5; i++)
                {
                    temp[i] = dt.AddDays(-(int)dt.DayOfWeek + i + 1);
                }
                double B = 0, max = 0;
                for (int i = 0; i < 5; i++)
                {
                    if (Array.IndexOf(temp, DateTime.Parse(ss[i, 0])) > -1)
                    {
                        if (double.Parse(ss[i, 2]) > max)
                        {
                            max = double.Parse(ss[i, 2]);
                            B = double.Parse(ss[i, 1]);
                        }
                    }
                }
                Console.WriteLine(B);
                Console.WriteLine(max);
      

  3.   

    本想有没有LINQ的写法,想学点新东西,呵呵,不过,这个写法也很满意了!谢谢ojlovecd!