2010-07-29 76 views
2

我們已經在我們的數據庫指示,看起來像這樣一週的每一天真/假標誌這一領域:「1111110」轉換字符數組/字符串布爾數列

我需要這個值轉換爲布爾數組。

對於我寫了下面的代碼:

char[] freqs = weekdayFrequency.ToCharArray(); 
bool[] weekdaysEnabled = new bool[]{ 
    Convert.ToBoolean(int.Parse(freqs[0].ToString())), 
    Convert.ToBoolean(int.Parse(freqs[1].ToString())), 
    Convert.ToBoolean(int.Parse(freqs[2].ToString())), 
    Convert.ToBoolean(int.Parse(freqs[3].ToString())), 
    Convert.ToBoolean(int.Parse(freqs[4].ToString())), 
    Convert.ToBoolean(int.Parse(freqs[5].ToString())), 
    Convert.ToBoolean(int.Parse(freqs[6].ToString())) 
}; 

而且我覺得這種方式太笨重,因爲很多轉換。

會是什麼這一固定長度字符串轉換成布爾Array的理想/乾淨的方式??

我知道你可以在for循環中寫這個,但一週中的天數永遠不會改變,因此我認爲這是更高效的方法。

回答

10

LINQ的位可以使這是一個非常簡單的任務:

var weekdaysEnabled = weekdayFrequency.Select(chr => chr == '1').ToArray(); 

注意string已經實現IEnumerable<char>,這樣你就可以直接使用就可以了LINQ方法。

+1

測試應該是'CHR ==「1''因爲你是比較字符。 – 2010-07-29 07:53:28

+0

那是什麼我愛計算器,你問一個問題,一分鐘後,你有UR答案; d,你必須在雙引號更改爲單引號,雖然cuz我們正在處理的字符,但否則該編譯OK:d謝謝! – Peter 2010-07-29 07:54:53

+0

@Darin:隨意只要編輯下一次後,當它顯然是一個錯字。 ;) – Noldorin 2010-07-29 07:55:57

2

在.NET 2

bool[] weekdaysEnabled1 = 
Array.ConvertAll<char, bool>(
    freqs, 
    new Converter<char, bool>(delegate(char c) { return Convert.ToBoolean(int.Parse(freqs[0].ToString())); })); 
+0

感謝上帝對LINQ權利;-)感謝您的幫助插件。 – Peter 2010-07-29 08:36:59

+0

weekdaysEnabled1是錯誤的:'allWeekdays'是正確的 這只是一個更簡潔的語法,但我認爲轉換次數是相同的:(我不知道爲什麼公共靜態布爾ToBoolean(char值)方法沒有實現在框架中 – Florian 2010-07-29 08:48:24