使用 CompareTo 的 VB.NET 排序顺序 - 结果不正确?

标签 vb.net string sorting compare compareto

我有一个很长的字符串值列表,我正在尝试在网格中进行排序。最初,默认排序算法用于整个网格。但是,我最终不得不重写网格的排序,因为一些列需要特殊排序,并且网格不允许对特定列进行自定义排序。这里有问题的列不需要特殊排序,所以我只使用了 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 测试
  3. 测试1000测试
  4. 测试一个测试
  5. 测试-B/A 我的测试

预期结果:

  1. 测试 - A/A 我的测试
  2. 测试-B/A 我的测试
  3. TEST1000 测试
  4. 测试1000测试
  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

有人以前遇到过这个问题或者有任何想法可能会发生什么吗?

最佳答案

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

考虑使用 Compare 的重载允许您指定 StringComparison作为序数

关于使用 CompareTo 的 VB.NET 排序顺序 - 结果不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11961053/

相关文章:

c++ - 如何从文件中读取 UTF 符号,就好像它们是 UTF 代码一样?

php - str_replace() 没有按预期工作

c# - ArrayList.Sort 应该是使用 IComparer 的稳定排序,但不是吗?

python - 对提供订单的字典列表进行排序

vb.net 中的 mysql avg() 函数

html - 将本地 HTML 文件/代码导入 WebBrowser

ios - 从字符串数组 Swift 中删除字符和元素

c# - 亚马逊视频点播 API

vb.net - 如何使用 SQL Server 数据库访问 Gmail 以存储在自定义 CRM 中?

c# - 更改源后 ICollectionView 排序不起作用