【问题标题】:VB.NET Sort Order Using CompareTo - Incorrect Results?使用 CompareTo 的 VB.NET 排序顺序 - 结果不正确?
【发布时间】:2012-08-11 06:16:18
【问题描述】:

我有一长串要在网格中排序的字符串值。最初,默认排序算法用于整个网格。但是,我最终不得不重写网格的排序,因为有几列需要特殊排序,而网格不允许对特定列进行自定义排序。这里有问题的列不需要特殊排序,所以我只使用了 CompareTo:

Public Function Compare(ByVal p1 as MyObj, ByVal p2 as MyObj) As Integer
    Return p1.Description.CompareTo(p2.Description)
End Function

比较默认的网格排序方法和我现在使用 CompareTo 的方法,我得到了完全相同的结果。但是,来自直接数据库查询的排序结果不同(根据我的想法,数据库结果是正确的)。

以下是我认为不正确的排序结果的三个示例:

示例 1

排序结果:

  1. 测试 - A/A 我的测试
  2. TEST1000 A 测试
  3. TEST1000 测试
  4. 测试测试
  5. 测试-B/A 我的测试

预期结果:

  1. 测试 - A/A 我的测试
  2. 测试-B/A 我的测试
  3. TEST1000 A 测试
  4. TEST1000 测试
  5. 测试测试

示例 2

排序结果:

  1. 测试 - 测试
  2. 测试我
  3. 测试-#1 A
  4. 测试-#1 B

预期结果:

  1. 测试我
  2. 测试 - 测试
  3. 测试-#1 A
  4. 测试-#1 B

示例 3

排序结果:

  1. 路易丝测试 1
  2. 路易丝测试 2
  3. 路易- 测试 1

预期结果:

  1. 路易- 测试 1
  2. 路易丝测试 1
  3. 路易丝测试 2

以前有没有人遇到过这个问题或者有什么想法?

【问题讨论】:

    标签: vb.net string sorting compare compareto


    【解决方案1】:

    CompareTo 进行区分大小写、区分区域性的排序,因此撇号、连字符等字符不会显示在严格的字符编码排序中的位置 - 这似乎是您所期望的。

    考虑使用Compare 的重载,让您将StringComparison 指定为序数

    【讨论】:

    • 谢谢吉姆!这正是我所需要的。我最终做了以下事情:String.CompareOrdinal(p1.Description, p2.Description)
    猜你喜欢
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 2020-07-08
    相关资源
    最近更新 更多