有誰知道我可以如何將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