数字或字母升序或降序的通用排序

时间:2019-02-23 22:05:00

标签: c# arrays algorithm sorting

如何排序仅包含字母或数字的通用数组?

  

让我们说我有一个通用的数组列表,该列表仅包含数字和   可以很容易地使用

进行排序
 public void sortAsc(ref T[] obj)

   {
      do
            {
                didSwap = false;
                for (int i = 0; i < obj.Length - 1; i++)
                {
                    if (Convert.ToInt32(obj[i]) < Convert.ToInt32(obj[i + 1]))
                    {
                        T temp = obj[i + 1];
                        obj[i + 1] = obj[i];
                        obj[i] = temp;
                        didSwap = true;
                    }
                }
            } while (didSwap);

   }

但是如果数组包含名称字符串并且我们想要以相同的方式排序将失败。

由于此

  

如果(Convert.ToInt32(obj [i])

请让我知道是否有通用的方法,否则我将不得不为每个逻辑分开。

1 个答案:

答案 0 :(得分:4)

看看List<T>.Sort()方法,这将满足您的需求。

它解决了必须使用Convert.ToInt32的问题,因为默认情况下它将使用所使用的实际类的IComparer实现,intstring都具有已经为您服务。

对于字符串:

var list = new List<string> { "dd", "aa", "ss" };
list.Sort();

//Output: list = ["aa", "dd", "ss"]

或整数:

var list = new List<int> { 1, 13, 5 };

list.Sort();

//Output: list = [1, 5, 13]

如果要使用自定义类,只需使您的类实现IComparable或通过让Sort()的调用者提供要使用的函数委托即可。有关更多详细信息,请参见第一个链接。