有谁知道我如何将 C# 中的字符串列表排序为与 SQLite 查询返回的顺序完全相同的顺序 - 包括所有特殊字符。我需要对返回的数据执行二进制搜索,但是我的 IComparer 使用的是 C# 的 String 的 CompareOrdinal,因此不起作用,因为两者之间的排序顺序不同。
我已将 SQlite 表的列定义为“collate nocase”。
有谁知道我如何将 C# 中的字符串列表排序为与 SQLite 查询返回的顺序完全相同的顺序 - 包括所有特殊字符。我需要对返回的数据执行二进制搜索,但是我的 IComparer 使用的是 C# 的 String 的 CompareOrdinal,因此不起作用,因为两者之间的排序顺序不同。
我已将 SQlite 表的列定义为“collate nocase”。
换个说法,如何对字符串列表进行排序而忽略大小写?
StringComparer类提供了支持特定区域性并且可以选择忽略大小写的比较器。要使用线程的当前文化进行排序,您可以使用 CurrentCultureIgnoreCase 比较器:
var myList=new List<string>{"aa2","Aa1"};
myList.Sort(StringComparer.CurrentCultureIgnoreCase);
InvariantCultureIgnoreCase 或 OrdinalIgnoreCase 比较器分别使用不变量和有序比较。
SQLite 默认使用 BINARY 排序规则,它等同于 Ordinal(SQLite v3 中 DataTypes 的第 6.1 段:
Every column of every table has an associated collating function. If no collating function is explicitly defined, then the collating function defaults to BINARY
除非您更改了表格的排序规则,否则您可以使用 OrdinalIgnoreCase 以忽略大小写的相同顺序排序。
您还可以使用StringComparer.Create方法为特定区域性创建比较器。