• 关于c#字符串三种逆转方法及性能比较的另外看法


    原文:c#字符串三种逆转方法及性能比较

    看到后觉得很奇怪,个人认为在很多情况下类库方法肯定要比自己写的方法性能好
    原文作者传入的字符串,如果是传入字符数组的话测试结果则大大出乎作者的意外。
    修改代码如下:
     class StringReverse
        {
            /// <summary>
            /// 字符串逆转-StringBuilder实现
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
            public static string ReverseUsingStringBuilder(char[] str)
            {
                int length = str.Length;
                StringBuilder sb = new StringBuilder(length);
    
                for (int i = length - 1; i >= 0; i--)
                {
                    sb.Append(str[i]);
                }
                return sb.ToString();
            }
    
            /// <summary>
            /// 字符串逆转-CharArray实现
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
            public static string ReverseUsingCharArray(char[] str)
            {
                char[] arr = str;
                Array.Reverse(arr);
                return new string(arr);
               // return string.Join(string.Empty,str.Reverse());
              
            }
            /// <summary>
            /// 字符串逆转-异或实现
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
            public static string ReverseUsingXor(char[] str)
            {
                char[] arr = str;
                int l = arr.Length-1;
    
                //交换值
                for (int i = 0; i < l; i++, l--)
                {
                    str[i] ^= str[l];
                    str[l] ^= str[i];
                    str[i] ^= str[l];
                }
                return new string(str);
            }
            public delegate string funcDelegate(char[] s);
    
            /// <summary>
            /// 测试方法
            /// </summary>
            /// <param name="description">方法描述</param>
            /// <param name="func">测试方法</param>
            /// <param name="times">执行次数</param>
            /// <param name="str">测试字符串</param>
            public static void Benchmark(string description, funcDelegate func, int times, char[] str)
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();
                for (int j = 0; j < times; j++)
                {
                    func(str);
                }
                sw.Stop();
                Console.WriteLine("方法{0}:调用{1}次,用时{2}.", description, times, sw.ElapsedTicks);
            }
            /// <summary>
            /// 生成指定长度随机字符串
            /// </summary>
            /// <param name="length">字条串长度</param>
            /// <returns></returns>
            public static char[] RandomString(int length)
            {
                Random random = new Random();
               // StringBuilder sb = new StringBuilder();
                char[] sb=new char[length];
                for (int i = 0; i < length; i++)
                {
                    sb[i]=Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
                }
                return sb;
            }
            static void Main(string[] args)
            {
                int[] lengths = new int[] { 1, 10, 15, 25, 50, 75, 100, 1000, 100000 };
              //  int[] lengths = new int[] { 1, 10, 15, 25, 50, 75, 100};
    
                foreach (int len in lengths)
                {
                    //每个方法都执行10000次,力求精确
                    int iterations = 10000;
    
                    //生成随机测试字符串
                    char[] testString = StringReverse.RandomString(len);
              
                    //打印测试信息
                    StringReverse.Benchmark(String.Format("String Builder (测试字符串长度为{0})", len), StringReverse.ReverseUsingStringBuilder, iterations, testString);
                    StringReverse.Benchmark(String.Format("Array.Reverse (测试字符串长度为{0})", len), StringReverse.ReverseUsingCharArray, iterations, testString);
                    StringReverse.Benchmark(String.Format("Xor (测试字符串长度为{0})", len), StringReverse.ReverseUsingXor, iterations, testString);
    
                    Console.WriteLine();
                }
                Console.Read();
    
            }
        }
    

      测试结果截图:

    作者:代码示例
    出处:http://codemo.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

    关注程序员健康

    您的支持是我前进的动力,请猛击
  • 相关阅读:
    第二阶段团队绩效评分
    团队冲刺2.9
    团队冲刺2.8
    团队冲刺2.7
    团队冲刺2.6
    团队冲刺2.5
    项目总结以及事后诸葛亮会议
    做什么都队第二阶段绩效评估
    第二阶段冲刺第十天
    第二阶段冲刺第九天
  • 原文地址:https://www.cnblogs.com/codemo/p/2545065.html
Copyright © 2020-2023  润新知