2013-03-22 49 views
0

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

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

回答

0

为了改变这个问题,你如何排序忽略大小写的字符串列表?

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

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

的InvariantCultureIgnoreCase或OrdinalIgnoreCase comparers分别用不变的顺序进行比较。

的SQLite默认使用BINARY排序,相当于序(第6.1段从DataTypes in SQLite v3

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方法的特定文化。

+0

号SQLite不知道目前的文化。它也是,我认为,服从UTF字符串排序的一些标准。 “NOCASE - 以不区分大小写的方式比较ASCII字符;其他字符被视为字节”。不确定这是否与C#的CompareOrdinalIgnoreCase相同。 – 2013-03-22 12:32:23

+0

不是。 SQLite默认使用二进制排序,这相当于Ordinal。它只是比较字节值 – 2013-03-22 12:38:26

相关问题