网站搜索排优化怎么做,班级网站首页怎么做,集团公司简介模板,php怎么做多个网站原来一直用SortList#xff0c;SortedDictionary来作为键值对存储的排序集合来用#xff0c;心中就默认是以key按ascall排序来存放的#xff0c;在之前的案例中也没有出现问题#xff0c;在最近一个demo中#xff0c;打破了原来的自以为是的认识#xff0c;因为在key中不… 原来一直用SortListSortedDictionary来作为键值对存储的排序集合来用心中就默认是以key按ascall排序来存放的在之前的案例中也没有出现问题在最近一个demo中打破了原来的自以为是的认识因为在key中不但有大写小还有特列符号。先看一下代码Console.WriteLine(-----------按ASCII排序-----------);
var chars new char[] { A, [, ], a };
foreach (var c in chars)
{Console.WriteLine(${c}{(int)c});
}
Console.WriteLine(-----------排序集合的排序-----------);
var list new SortedListstring, int();
list.Add(a, 97);
list.Add(A, 65);
list.Add([, 91);
list.Add(], 93);
foreach (var item in list)
{Console.WriteLine(${item.Key}{item.Value});
}结果如下显然SortList的key结果不是想要的按ascall排序的。那怎么才能达到按ascall呢那就自己动手做一个排序器吧其实就是实现IComparerstring接口中的Compare告诉两个string的比较规则那自然多个数据的排序就能按这种规则给出来。当然我给的按ascall的这个规则丝毫没有优美而言只是能表示出意思来。Console.WriteLine(-----------新排序集合的排序-----------);
var newList new SortedListstring, int(new ASCALLComparer());
newList.Add(a, 97);
newList.Add(A, 65);
newList.Add([, 91);
newList.Add(], 93);
foreach (var item in newList)
{Console.WriteLine(${item.Key}{item.Value});
}public class ASCALLComparer : IComparerstring
{public int Compare(string? x, string? y)
{if (x null || y null){throw new Exception(x or y is null);}if (x?.Length ! y?.Length){if (x?.Length y?.Length){for (var i 0; i x?.Length; i){if ((int)x[i] (int)y[i]){return 1;}else if ((int)x[i] (int)y[i]){return -1;}}return -1;}else{for (var i 0; i y?.Length; i){if ((int)x[i] (int)y[i]){return 1;}else if ((int)x[i] (int)y[i]){return -1;}}return 1;}}else{for (var i 0; i x?.Length; i){if ((int)x[i] (int)y[i]){return 1;}else if ((int)x[i] (int)y[i]){return -1;}}return 0;}}
}结果为那原来的排序规则是什么呢我枚举了一下ascall范围内部分可见字符下面是正序的排序方式序号符号ascall值89101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101_-,;:!?.()[]{}*/\#%^|~$0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ95454459583363463934404191931231256442479238353796944360616212412636484950515253545556579765986699671006810169102701037110472105731067410775108761097711078111791128011381114821158311684117851188611987120881218912290