2014-04-04 18 views
1

我有4個布爾參數,用於清理使用Nport從比例中獲得的字符串。我不得不這樣做在框架3.5 VS 2008如何在C#中以方便的方式處理多個輸入組合

我有16個可能的輸入組合:

  • 真真真真
  • 真真真假
  • 真真假真
  • 真true false false
  • true false true true
  • true false true false
  • 真的假的假的真
  • 真假假假
  • 假假真真真真
  • 假真真假
  • 假真假真
  • 假的真虛假
  • 假假真真
  • false false false false
  • false false false true
  • false false false fa lse

對於每種情況,我必須對該字符串執行不同的操作。

但是,如何不寫許多交織ifelse子句? 我可以在屏幕上打印出來,但根據我的說法,一個開關不可能出現問題,並且框架3.5中尚不存在元組。

public void CompositionBooleans(string result, int counter) 
     { 
      if (counter == 0) 
       return; 

      bool[] booleans = new bool[2] { true, false }; 

      for (int j = 0; j < 2; j++) 
      { 
       StringBuilder stringBuilder = new StringBuilder(result); 
       stringBuilder.Append(string.Format("{0} ", booleans[j].ToString())).ToString(); 

      if (counter == 1) 
       Console.WriteLine(stringBuilder.ToString()); 

      CompositionBooleans(stringBuilder.ToString(), counter - 1); 
     } 
    } 

這是我用來打印出來的代碼。

但我需要這些情況,如果其他結構將採取永久性並且根本不靈活。 有誰知道如何做到這一點?

+0

爲什麼不把布爾值數組傳遞給strig.format,它接受一個對象[]。但是,也許我錯誤地理解了這一點,而這並不是你所追求的。 –

+0

我會檢查這一點。作爲我需要的一個例子,我可以說如果startchar = 3和stopchar = 2被填充而其他2是空的。我有真,假,假,真。然後從startchar到stopchar的子字符串。 – user3497156

回答

1

如果你真的有一個不同的過程爲每個16個可能的組合做,我會建議布爾數組轉換成int和對INT切換:

int i = booleans[0]?1:0 
     + 2*(booleans[1]?1:0) 
     + 4*(booleans[2]?1:0) 
     + 8*(booleans[3]?1:0); 

switch (i) 
{ 
    case 0: //false false false false 
    case 1: //true false false false 
    case 2: //false true false false 
    //... 
    case 15: //true true true true 
} 

但是你確定每個情況完全不同,不僅僅是4方面的結合?

+0

同意這一點。將4個變量合併成個別情況,然後查找重疊。 – deworde

+0

有16箇中有12個是可能的。有一點重疊,但我不認爲沒有辦法壓縮是。如果startchar被填充,我必須從字符串的開始處切割例如3的值的nr,如果停止char被填充,我必須剪掉最後一部分。如果startchar和valuelength被填充,那麼我需要剪切字符串的第一部分,並獲取在valuelenght中定義的字符串的確切長度。等等。謝謝您的幫助 – user3497156

0
public static void main(String[] args) 
{ 
    boolean[] items = new boolean[] {true, true, true, true}; 
    int actionIndex = getActionIndex(0, 0, items); 
       //do your action here: you could store lambda expressions and apply them 
    System.out.write(actionIndex); 
} 

public static int getActionIndex(int currentItem, int currentIndex, boolean[] items) 
{ 
    if(currentItem == items.length) 
    { 
     return currentIndex; 
    } 

    if(items[currentItem]) 
    { 
     currentIndex += Math.pow(2, (items.length - 1) - currentItem); 
    } 

    return getActionIndex(++currentItem, currentIndex, items); 
} 
相關問題