将C#中的字符串列表排序为与SQLite相同的顺序

时间:2013-03-22 12:22:36

标签: c# sqlite sorting binary-search

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

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

1 个答案:

答案 0 :(得分:0)

要重新解释这个问题,如何对一个忽略大小写的字符串列表进行排序?

StringComparer类提供支持特定文化的比较器,并且可以选择忽略大小写。要使用线程的当前文化进行排序,可以使用CurrentCultureIgnoreCase比较器:

var myList=new List<string>{"aa2","Aa1"};
myList.Sort(StringComparer.CurrentCultureIgnoreCase);

InvariantCultureIgnoreCase或OrdinalIgnoreCase比较器分别使用不变和有序比较。

SQLite默认使用BINARY collat​​ion,它等同于Ordinal(来自DataTypes in SQLite v3的第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方法为特定文化创建比较器。