【问题标题】:Generic Sort for Number or Alphabet in Ascending or Descending Order按升序或降序对数字或字母进行通用排序
【发布时间】:2019-07-17 16:55:32
【问题描述】:

如何对只能包含字母或数字的通用数组进行排序?

假设我有一个仅包含数字的通用数组列表,并且 可以使用轻松排序

 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);

   }

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

因为这个

if (Convert.ToInt32(obj[i])

如果有通用方法,请告诉我,否则我必须为每个方法分开逻辑。

【问题讨论】:

    标签: c# arrays algorithm sorting


    【解决方案1】:

    看看List&lt;T&gt;.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() 的调用者提供一个函数委托来使用。有关文档中的更多详细信息,请参阅第一个链接。

    【讨论】:

      猜你喜欢
      • 2018-07-21
      • 2017-06-10
      • 2022-01-09
      • 2013-05-01
      • 2018-05-03
      • 1970-01-01
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多