按升序或降序对数字或字母进行通用排序

Posted

技术标签:

【中文标题】按升序或降序对数字或字母进行通用排序【英文标题】: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])

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

【问题讨论】:

【参考方案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() 的调用者提供一个函数委托来使用。有关文档中的更多详细信息,请参阅第一个链接。

【讨论】:

以上是关于按升序或降序对数字或字母进行通用排序的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch:使用处理器对数组进行排序

Elasticsearch:使用处理器对数组进行排序

SQL 按关键字排序

JavaScript sort函数的使用

js数组排序的六种方法

如何在 swift 中按字母顺序对 JSON 字符串进行排序?