2013-03-22 53 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

相關問題