2011-04-01 78 views
2

因为想要看似合理的编程逻辑而难以忍受。编程逻辑! :O

在SSIS的脚本任务中。需要做一些数据转换..以下..

switch(LeadTime) 
{ 

case: 1 

WM1 = DAY1 
WM2 = DAY2 
WM3 = DAY3 
WM4 = DAY4 
WM5 = DAY5 
WM6 = DAY6 
WM7 = DAY7 


case: 2 

WM1 = DAY1 + DAY2 
WM2 = DAY2 + DAY3 
WM3 = DAY3 + DAY4 
WM4 = DAY4 + DAY5 
WM5 = DAY5 + DAY6 
WM6 = DAY6 + DAY7 
WM7 = DAY7 + DAY1 


case: 3 


WM1 = DAY1 + DAY2 + DAY3 
WM2 = DAY2 + DAY3 + DAY4 
WM3 = DAY3 + DAY4 + DAY5 
WM4 = DAY4 + DAY5 + DAY6 
WM5 = DAY5 + DAY6 + DAY7 
WM6 = DAY6 + DAY7 + DAY1 
WM7 = DAY7 + DAY1 + DAY2 


.................. 

case: 7 

WM1 = DAY1 + DAY2 + DAY3 + DAY4 + DAY5 + DAY6 + DAY7 
WM2 = DAY2 + DAY3 + DAY4 + DAY5 + DAY6 + DAY7 + DAY1 
WM3 = DAY3 + DAY4 + DAY5 + DAY6 + DAY7 + DAY1 + DAY2 
WM4 = DAY4 + DAY5 + DAY6 + DAY7 + DAY1 + DAY2 + DAY3 
WM5 = DAY5 + DAY6 + DAY7 + DAY1 + DAY2 + DAY3 + DAY4 
WM6 = DAY6 + DAY7 + DAY1 + DAY2 + DAY3 + DAY4 + DAY5 
WM7 = DAY7 + DAY1 + DAY2 + DAY3 + DAY4 + DAY5 + DAY6 


} 

我怎样才能建立一个循环,使其良好的编程?我在亏损,因为它在中间价值后从两端增加..

这是我所能做的! :O

case: 7 

for(int i=0;i<LeadTime;i++) 
{ 
WM1 += Array[i]; 
WM2 += Array[i]; 
... 
WM7 += Array[i]; 
} 
+2

仅供参考,您的'情况7'都是数学上是相同的。 – 2011-04-01 21:11:54

+0

是丹尼尔..这只是一个概率的例证。 – hillary 2011-04-01 21:13:23

+0

删除了“功能性编程”标签。 – phooji 2011-04-01 21:18:43

回答

4

像这样的东西应该为所有情况下工作(假设数组是从零开始):

for(int i=0;i<LeadTime;i++) 
{ 
    WM1 += Array[(0+i)%7]; 
    WM2 += Array[(1+i)%7]; 
    ... 
    WM7 += Array[(6+i)%7]; 
} 
+0

我会接受这个作为我想要的..!优雅..简单n容易为我的旧生锈脑!感谢所有您的答案..这是非常棒的回应..随时张贴,如果你想更多..!太有趣了!!! – hillary 2011-04-02 01:58:10

6

您可以使用模数进行换行。这应该为所有工作:

WM = new int[7]; 
for (int i = 0; i < LeadTime; i++) { 
    for (int j = 0; j < WM.Length; j++) { 
    WM[j] += Array[(i + j) % 7]; 
    } 
} 
+0

精彩!!!!!! – hillary 2011-04-02 01:59:19

4

你想要做的是创造,你可以调用一个函数不同的情况。

function foo(int LeadTime) { 
    for(int i=0; i < LeadTime; i++){ 
     int k = i; 
     for (int j = 0; j < LeadTime; j++){ 
      if (k > 7) { k = 1; } 
      wm[i] += day[k]; 
      k++; 
     } 
    } 
} 
2

我很快想出了这段代码。 Bascially你将不得不做一个嵌套循环

string[] days = new string[] { "DAY1", "DAY2", "DAY3", "DAY4", "DAY5", "DAY6", "DAY7" }; 

      List<string> res = new List<string>(); 
      res.Add(string.Empty); 

      int Leadtime = 7; 

      for (int i = 1; i <= Leadtime; i++) 
      { 
       res.Add(string.Empty); 
       int tmp = i + Leadtime - 1; 

       for (int x = i; x <= tmp; x++) 
       { 
        if (x > Leadtime) { x = 1; tmp = i-1; } 
        res[i] += " " + days[x-1]; 
       } 

      } 

      foreach (string s in res) 
      { 
       Console.WriteLine(s); 
      } 

      Console.ReadKey(); 

结果:

DAY1 DAY2 DAY3 DAY4 DAY5 DAY6 DAY7 
DAY2 DAY3 DAY4 DAY5 DAY6 DAY7 DAY1 
DAY3 DAY4 DAY5 DAY6 DAY7 DAY1 DAY2 
DAY4 DAY5 DAY6 DAY7 DAY1 DAY2 DAY3 
DAY5 DAY6 DAY7 DAY1 DAY2 DAY3 DAY4 
DAY6 DAY7 DAY1 DAY2 DAY3 DAY4 DAY5 
DAY7 DAY1 DAY2 DAY3 DAY4 DAY5 DAY6 
+0

再看一遍这个问题,我不认为我的代码是解决了确切的问题,因为我添加了所有的日子。问题显示有些日子取决于提前期而被忽略。我的代码只能解决“情况7” – 2011-04-01 21:29:52

+0

啊..这个想法的完整标记!它有助于..! – hillary 2011-04-02 22:31:33