使用LINQ转换

时间:2012-01-23 11:04:37

标签: linq c#-3.0

我写这段代码来减去二进制值,我需要代替for循环使用,我需要使用LINQ来解决性能问题,我试过但是Ifailed,代码是

        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;

                }

            }
        }
    }
} 

2 个答案:

答案 0 :(得分:3)

Linq没有为你的示例代码添加任何受益者,它只是让它慢一点,因为一些内部函数调用,它只是在某些情况下实现了yield模式,但你的代码不需要这个,还有linq它更复杂,但您当前的代码很容易阅读。所以我建议不要使用linq,除非它让你的生活更美好。没有用linq做任何事情。

答案 1 :(得分:0)

为什么不将二进制数转换为整数类型,例如

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

/* Perform your arithmetic here */

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

我不确定这对性能有何影响,但我认为它比任何涉及LINQ的解决方案都要快。