hebutyll 发表于 2013-3-4 15:17:20

通过扩展方法对数组进行的一些扩展(二):修复之前的小问题,增加排序

之前的对数组进行扩展的连接和反转两个方法无意中发现一些小问题,在这里重新进行了修改。在连接这个方法里面加了一个重载,感觉效果会更好些。增加了一个排序的方法,以前对数组的排序可以使用Array.Sort()这个方法,但是要求必须实现IComparable这个接口,我感觉限制性太多,所以在方法里面增加委托,这样对数组的排序就可以按照我们的方法随意安排了
这是修改之后的Join方法还有一个重载
/// <summary>
      /// 将Array输出为中间用字符连接的字符串
      /// </summary>
      /// <typeparam name="T"></typeparam>
      /// <param name="originArray">原数组</param>
      /// <param name="conStr">连接分隔符</param>
      /// <returns>输出的字符串</returns>
      public static string Join<T>(this T[] originArray, char conStr)
      {
            int length = originArray.Length;
            if (length == 0)
            {
                return "";
            }
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < length; i++)
            {
                sb.Append(originArray.ToString() + conStr);
            }
            return sb.Remove(sb.Length - 1, 1).ToString();
      }

      /// <summary>
      /// 将Array用字符串连接输出
      /// </summary>
      /// <typeparam name="T"></typeparam>
      /// <param name="originArray"></param>
      /// <param name="conStr"></param>
      /// <returns></returns>
      public static string Join<T>(this T[] originArray, string conStr)
      {
            int length = originArray.Length;
            if (length == 0)
            {
                return "";
            }
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < length; i++)
            {
                sb.Append(originArray.ToString() + conStr);
            }
            return sb.Remove(sb.Length- conStr.Length, conStr.Length).ToString();
      }
新增加的排序方法
/// <summary>
      /// 将数组按照一定的排序规则进行重新排列
      /// </summary>
      /// <typeparam name="T"></typeparam>
      /// <param name="originArray">原数组</param>
      /// <param name="compare">排序规则</param>
      /// <returns></returns>
      public static T[] Sort<T>(this T[] originArray,Compare<T> compare)
      {
            if (originArray.Length == 0 || originArray.Length == 1)
            {
                return originArray;
            }

            T temp = default(T);
            for (int i = 0; i < originArray.Length; i++)
            {
                for (int j = i + 1; j < originArray.Length; j++)
                {
                  if (compare(originArray, originArray))
                  {
                        temp = originArray;
                        originArray = originArray;
                        originArray = temp;
                  }
                }
            }

            return originArray;
      }

简单的使用示例
int[] nums = new int { 3, 1, 5, 2, 3 };
            Console.WriteLine(nums.Sort(delegate(int num1, int num2) {
                return num1 < num2;
            }).Join(' '));

输出 5 3 3 2 1


ibcadmin 发表于 2013-3-4 21:55:02

好贴就要设精华{:2_37:}

hebutyll 发表于 2013-3-5 14:45:28

ibcadmin 发表于 2013-3-4 21:55 static/image/common/back.gif
好贴就要设精华

谢谢啊,:lol:)

ibcadmin 发表于 2013-3-5 16:58:34

已经设了

chao2332601 发表于 2013-6-16 01:35:52

谢谢分享!!!
页: [1]
查看完整版本: 通过扩展方法对数组进行的一些扩展(二):修复之前的小问题,增加排序