【问题标题】:Working Principle of Array.Sort()Array.Sort()的工作原理
【发布时间】:2015-10-06 19:04:30
【问题描述】:

我的输入数组定义如下:

  string[] inputArray = { "a", "s", "d", "f", "g", "2", "3", "34", "4", "4", "y", "a", "f", "8", "h", "m" };

当我对该数组执行排序时,我得到的输出为:

{"2","3","34","4","4","8","a","a","d","f","f","g","h","m","s","y"}
  1. 为什么数字在字母之前?

  2. Array.Sort()是否对ASCII码(数字的ASCII码低于字母)的基础进行排序?

  3. 如果数组由特殊字符和字母数字组成,如何定义排序顺序?

【问题讨论】:

  • 投反对票没有任何意义。这是一个值得讨论的有效问题
  • 这是一个简单的查找:MSDN

标签: c# arrays sorting


【解决方案1】:

因为Array.Sortuses the default comparer为了排序。 comparer 将根据当前文化比较两个字符串(请注意,当双方都是字符串时,比较器具有故障转移机制)。这通常会根据它们的字符代码来比较它们,然后数字在字母之前。

【讨论】:

  • ASCII 是如此上个世纪。
【解决方案2】:

字符串以所谓的字典顺序进行比较,这意味着您比较前两个字符,如果相等则比较接下来的两个,依此类推。如果其中一个字符串先于另一个结束,则它先出现。

确实比较了两个字符的数值,通常是 ASCII。在 ASCII 表中,控制字符(不可打印)在前,然后是数字、大写字母、小写字母和这些组之间的特殊字符。

【讨论】:

    【解决方案3】:

    其逻辑基于 IComparable 接口。因此 sort 方法使用的默认实现更喜欢数字而不是字母。

    其次:它完全基于 IComparable 接口,您可以在here 中查看文档

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-02
      • 2019-01-24
      • 2021-03-20
      • 2011-10-26
      • 2017-12-02
      • 2014-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多