排序集合的乙個小坑

2022-10-09 01:09:09 字數 3215 閱讀 4941

原來一直用sortlist,sorteddictionary來作為鍵值對儲存的排序集合來用,心中就預設是以key按ascall排序來存放的,在之前的案例中也沒有出現問題,在最近乙個demo中,打破了原來的自以為是的認識,因為在key中不但有大寫小,還有特列符號。

先看一下**:

console.writeline("

-----------按ascii排序-----------");

var chars = new

char ;

foreach (var c in

chars):"

);}console.writeline(

"-----------排序集合的排序-----------");

var list = new sortedlist();

list.add("a

", 97

);list.add("a

", 65

);list.add("[

", 91

);list.add("]

", 93

);foreach (var item in

list):"

);}

結果如下,顯然sortlist的key結果不是想要的按ascall排序的。

那怎麼才能達到按ascall呢?那就自己動手做乙個排序器吧,其實就是實現icomparer介面中的compare,告訴兩個string的比較規則,那自然多個資料的排序就能按這種規則給出來。當然我給的按ascall的這個規則,絲毫沒有優美而言,只是能表示出意思來。

console.writeline("

-----------新排序集合的排序-----------");

var newlist = new sortedlist(new

ascallcomparer());

newlist.add("a

", 97

);newlist.add("a

", 65

);newlist.add("[

", 91

);newlist.add("]

", 93

);foreach (var item in

newlist):"

);}public

class ascallcomparer : icomparer

if (x?.length != y?.length)

else

if ((int)x[i] < (int

)y[i])

}return -1

; }

else

else

if ((int)x[i] < (int

)y[i])

}return1;}}

else

else

if ((int)x[i] < (int

)y[i])

}return0;}}

}

結果為:

那原來的排序規則是什麼呢?我列舉了一下ascall範圍內部分可見字元,下面是正序的排序方式:

序號符號

ascall值89

mongodb的乙個小坑

若collection裡有其他的資料,顯示時注意要往query裡新增true,並且需要放在最前面。解釋 下圖是名為test的collection裡面的資料。可以看到上面5條是一樣的資料,第6條是為了測試故意新增進去的。首先,當你執行命令db.getcollection test find 結果如下。...

Mybatis的乙個小坑

以前一直用的ibatis,前陣子才改用的mybatis,對於一些細節不太了解,所以踩了這個坑。廢話不多說,上 下面是出問題的sql語句 insert into g label obj relation his id label obj relation,id label,followed obj c...

sprintf sscanf中的乙個小坑

char buf 32 sprintf buf,s,d test 100 char out 32 int i 0 sscanf buf,s,d out,i 這段 開始以為會正常執行,結果卻是crash。sscanf在解析 s的時候遇到空格 指標符號 n才會停止解析,而這個 s後面的逗號基本上是乙個擺...