几种字符串反转方法效率比较

     static string Reverse1(string original)
            
...{
                
char[] arr = original.ToCharArray();
                Array.Reverse(arr);
                
return new string(arr);
            }


            
static string Revease21(string original)
            
...{
                
int length = original.Length;
                
char[] arr = new char[length];
                
for (int i = 0; i < (length & (~3)); i += 4)
                
...{
                    arr[i] 
= original[length - i - 1];
                    arr[i
+1= original[length - i - 2];
                    arr[i
+2= original[length - i - 3];
                    arr[i
+3= original[length - i - 4];
                }

                
for (int i = length & (~3); i < length; i++)
                
...{
                    arr[i] 
= original[length - i - 1];
                }

                
return new string(arr);
            }


            
static string Revease22(string original)
            
...{
                
int length = original.Length;
                
char[] arr = new char[length];
                
for (int i = 0; i < length; i++)
                
...{
                    arr[i] 
= original[length - i - 1];
                }

                
return new string(arr);
            }


            
static string Revease3(string original)
            
...{
                
int length = original.Length;
                StringBuilder sb 
= new StringBuilder(length);
                
for (int i = length-1; i >= 0; i--)
                sb.Append(original[i]);
                
return sb.ToString();
            }




Revease1()中对char[]进行了两次赋值(ToCharArray()和Array.Revease),所以我有想到了Revease2和Revease3()两种方法,下面是对这四种方法进行简单性能测试的代码:
    static   void  Main( string [] args)
            
... {
                
string testString = "测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转测试字符串反转";
                DateTime start 
= DateTime.Now;
                
for (int i = 0; i < 3000000; i++)
                
...{
                    
string s = Reverse1(testString);
                }

                DateTime end 
= DateTime.Now;
                Console.WriteLine(
"1 :  "+(end - start));

                start 
= DateTime.Now;
                
for (int i = 0; i < 3000000; i++)
                
...{
                    
string s = Revease21(testString);
                }

                end 
= DateTime.Now;
                Console.WriteLine(
"21:  " + (end - start));

                start 
= DateTime.Now;
                
for (int i = 0; i < 3000000; i++)
                
...{
                    
string s = Revease22(testString);
                }

                end 
= DateTime.Now;
                Console.WriteLine(
"22:  " + (end - start));

                start 
= DateTime.Now;
                
for (int i = 0; i < 3000000; i++)
                
...{
                    
string s = Revease3(testString);
                }

                end 
= DateTime.Now;
                Console.WriteLine(
"3 :  " + (end - start));

                Console.ReadLine();
            }

测试结果是Revease1()代码最简洁,运行速度也最快,Revease21()和Revease22()其次,Revease3()最慢。可见.net framework中实现的ToCharArray()和Array.Revease()效率还是蛮高的^_^

转:http://blog.csdn.net/happyhippy/archive/2006/10/30/1357692.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值