2012-01-23 56 views
-2

我寫這篇文章的代碼減去二進制值,我需要的,而不是爲循環使用,我需要使用LINQ的性能問題,我試過,但Ifailed,代碼轉換使用LINQ

 static void Main(string[] args) 
     { 

      byte[] data = { 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0 }; 

      if (data[0] == 1) 
      { 

       byte[] One = new byte[data.Length]; 
       One[One.Length - 1] = 1; 

       byte borrow = 0; 

       for (int i= data.Length -1 ; i > -1 ; i--) 
       { 
        if(borrow == 1) data[i] = 0; 
        if (data[i] == 0 && One[i] == 0) 
        { 
         borrow = 0; data[i] = 0; 

        } 
        else if (data[i] == 0 && One[i] == 1) 
        { 
         borrow = 1 ; data[i] = 1; 

        } 
        else if (data[i] == 1 && One[i] ==0) 
        { 
         borrow = 0; data[i] = 1; 

        } 
        else if (data[i] == 1 && One[i] == 1) 
        { 
         borrow = 0; data[i] = 0; 

        } 
        if (data[i] == 1) data[i] = 0; else data[i] = 1; 

       } 

      } 
     } 
    } 
} 
+3

問題是? – Oded

+3

LINQ內部也使用循環,你爲什麼認爲它會給你一個性能好處? –

+0

Linq不會給你更好的表現 –

回答

3

LINQ的沒有按」不要在你的示例代碼中添加任何受益人,它只是讓它慢一點,因爲有些內部函數調用,它只是在某些情況下實現了yield模式,但是你的代碼不需要這樣做,而且對於linq來說它更復雜,但是你的目前的代碼很容易閱讀。所以我建議不要使用linq,除非它讓你的生活更美好。沒有用linq做所有事情。

0

爲什麼不將您的二進制數轉換爲整數類型,例如

Int32 x = Convert.ToInt32("100000100100", 2); 

/* Perform your arithmetic here */ 

string result = Convert.ToString(x, 2); 

我不知道怎麼說是表現,但我會假設它比涉及LINQ的任何解決方案快。

+0

我需要在二進制firsst上工作,然後選擇某個部分並用零填充其他部分,然後轉換 – AMH