【问题标题】:Linq OrderBy sort ruleLinq OrderBy 排序规则
【发布时间】:2016-08-11 12:01:42
【问题描述】:

我想知道 Linq 的 OrderBy 方法根据哪个规则决定如何对字符列表进行排序。我认为它在 Ascii 表中的值的帮助下将字符相互比较,但我自己尝试了一下,结果不正确。那么有人知道排序是根据哪个规则完成的吗?

编辑:

 string[] letters = { " ", "!", "+", "1", "9", "?", "A", "B", "Y", "Z", "[", "a", "b", "y", "z", "{"};
 IEnumerable<string> ascending = letters.OrderBy(x => x);
 // returns { " ", "!", "?", "[", "{", "+", "1", "9", "a", "A", "b", "B", "y", "Y", "z", "Z"}

我很早就收到了相同的清单,但我收到了一份全新的订单。

解决方案: 我使用了字符串数组而不是 char 数组,因此 OrderBy 对字符串进行了排序,这与使用 chars 时不同。

【问题讨论】:

  • 你能添加你的例子和你的期望吗?
  • 你能把屏幕亮度调高一点吗?看到你已经尝试过的代码有点困难......
  • @GeoffJames 但是......我想如果你把亮度调高,昏暗的问题就会消失...... :)
  • 哈哈。非常聪明的@Noctis :) 毕竟,这可能不是一个坏主意 - 在这种情况下

标签: c# .net linq sorting


【解决方案1】:

它订购得很好。它通过比较string(它是string[])的方式对其进行排序。如果您希望它通过 char 的 ASCII 值来执行此操作,则它应该是 char[] 而不是 string[]

char[] letters = { ' ', '!', '+', '1', '9', '?', 'A', 'B', 'Y', 'Z', '[', 'a', 'b', 'y', 'z', '{', ' ', '!', '+', '1', '9' };
var descending = letters.OrderByDescending(x => x).ToList();

还有变量的名称,我猜你想要OrderByDescending 方法。

【讨论】:

    【解决方案2】:

    如果出于某种原因您想继续使用字符串,但不希望默认的文化敏感比较,您可以通过将IComparer 参数添加到对OrderBy 的调用并指定您希望比较使用代码点值进行排序:

    letters.OrderBy(x => x, StringComparer.Ordinal);
    

    【讨论】:

      【解决方案3】:

      两个字符通过它们的 ASCII 或 Unicode 值进行比较。

      ASCII 表:http://www.theasciicode.com.ar/american-standard-code-information-interchange/ascii-codes-table.png

      所以 ('A' is 65) 被认为大于 ('a' is 97) b'coz 65 在 97 之前。 您可以在上表中查找数组中每个字符的 ASCII 码。 (而且你的数组应该是“char[] letters”而不是“string[] letters”,从我所见:D)

      【讨论】:

      • 这是我的问题,我忽略了我使用的数据类型错误。
      猜你喜欢
      • 2013-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 2012-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多