有没有人知道如何将C#中的字符串列表排序为与SQLite查询返回的完全相同的顺序 - 包括所有特殊字符。我需要对返回的数据执行二进制搜索,但是我的IComparer正在使用C#的String的CompareOrdinal,因此不起作用,因为两者之间的排序顺序不同。
我已将SQlite表的列定义为“collate nocase”。
答案 0 :(得分:0)
要重新解释这个问题,如何对一个忽略大小写的字符串列表进行排序?
StringComparer类提供支持特定文化的比较器,并且可以选择忽略大小写。要使用线程的当前文化进行排序,可以使用CurrentCultureIgnoreCase比较器:
var myList=new List<string>{"aa2","Aa1"};
myList.Sort(StringComparer.CurrentCultureIgnoreCase);
InvariantCultureIgnoreCase或OrdinalIgnoreCase比较器分别使用不变和有序比较。
SQLite默认使用BINARY collation,它等同于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方法为特定文化创建比较器。