原來一直用sortlist,sorteddictionary來作為鍵值對儲存的排序集合來用,心中就預設是以key按ascall排序來存放的,在之前的案例中也沒有出現問題,在最近乙個demo中,打破了原來的自以為是的認識,因為在key中不但有大寫小,還有特列符號。
先看一下**:
console.writeline("結果如下,顯然sortlist的key結果不是想要的按ascall排序的。-----------按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):"
);}
那怎麼才能達到按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後面的逗號基本上是乙個擺...