2011-04-01 77 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