有谁知道我可以如何将C#中的字符串列表排序为与SQLite查询返回的完全相同的顺序 - 包括所有特殊字符。我需要对返回的数据执行二分搜索,但是我的IComparer使用的是C#的String的CompareOrdinal,因此不起作用,因为两者之间的排序顺序不同。将C#中的字符串列表按照与SQLite相同的顺序排序
我已经将SQlite表的列定义为“collate nocase”。
有谁知道我可以如何将C#中的字符串列表排序为与SQLite查询返回的完全相同的顺序 - 包括所有特殊字符。我需要对返回的数据执行二分搜索,但是我的IComparer使用的是C#的String的CompareOrdinal,因此不起作用,因为两者之间的排序顺序不同。将C#中的字符串列表按照与SQLite相同的顺序排序
我已经将SQlite表的列定义为“collate nocase”。
为了改变这个问题,你如何排序忽略大小写的字符串列表?
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方法的特定文化。
号SQLite不知道目前的文化。它也是,我认为,服从UTF字符串排序的一些标准。 “NOCASE - 以不区分大小写的方式比较ASCII字符;其他字符被视为字节”。不确定这是否与C#的CompareOrdinalIgnoreCase相同。 – 2013-03-22 12:32:23
不是。 SQLite默认使用二进制排序,这相当于Ordinal。它只是比较字节值 – 2013-03-22 12:38:26