0

有谁知道我如何将 C# 中的字符串列表排序为与 SQLite 查询返回的顺序完全相同的顺序 - 包括所有特殊字符。我需要对返回的数据执行二进制搜索,但是我的 IComparer 使用的是 C# 的 String 的 CompareOrdinal,因此不起作用,因为两者之间的排序顺序不同。

我已将 SQlite 表的列定义为“collat​​e nocase”。

4

1 回答 1

0

换个说法,如何对字符串列表进行排序而忽略大小写?

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方法为特定区域性创建比较器。

于 2013-03-22T12:29:17.833 回答