排序集合的一个小坑

原来一直用SortList,SortedDictionary来作为键值对存储的排序集合来用,心中就默认是以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 SortedList<string, 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排序的。

a10e163ef9c493f2e2f9c6389fa6a1ec.png

那怎么才能达到按ascall呢?那就自己动手做一个排序器吧,其实就是实现IComparer<string>接口中的Compare,告诉两个string的比较规则,那自然多个数据的排序就能按这种规则给出来。当然我给的按ascall的这个规则,丝毫没有优美而言,只是能表示出意思来。

Console.WriteLine("-----------新排序集合的排序-----------");
var newList = new SortedList<string, 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 : IComparer<string>
{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;}}
}

结果为:

0f4616c28a49e65d3fce21ffefd91184.png

那原来的排序规则是什么呢?我枚举了一下ascall范围内部分可见字符,下面是正序的排序方式:

序号
符号
ascall值

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

_

-

,

;

:

!

?

.

'

"

(

)

[

]

{

}

@

*

/

\

&

#

%

`

^

+

<

=

>

|

~

$

0

1

2

3

4

5

6

7

8

9

a

A

b

B

c

C

d

D

e

E

f

F

g

G

h

H

i

I

j

J

k

K

l

L

m

M

n

N

o

O

p

P

q

Q

r

R

s

S

t

T

u

U

v

V

w

W

x

X

y

Y

z

Z

95

45

44

59

58

33

63

46

39

34

40

41

91

93

123

125

64

42

47

92

38

35

37

96

94

43

60

61

62

124

126

36

48

49

50

51

52

53

54

55

56

57

97

65

98

66

99

67

100

68

101

69

102

70

103

71

104

72

105

73

106

74

107

75

108

76

109

77

110

78

111

79

112

80

113

81

114

82

115

83

116

84

117

85

118

86

119

87

120

88

121

89

122

90

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python distplot 图_Python可视化23 |seaborn.distplot公司单变量分布图(直方图|核密度图),23seaborndistplot...

本文介绍seaborn.distplot绘制单变量分布图&#xff1b;之前文章介绍的核密度图(kernel density estimate (KDE))以及二者结合图。目录本文内容概要直方图核密度图直方图结合核密度图1、seaborn.distplotseaborn.distplot(a, binsNone,histTrue,kdeTrue,rugFalse, fitNone, his…

绘制矩形php,PHP_php绘制一个矩形的方法,本文实例讲述了php绘制一个矩 - phpStudy...

php绘制一个矩形的方法本文实例讲述了php绘制一个矩形的方法。分享给大家供大家参考。具体实现方法如下&#xff1a;//1、创建画布$im imagecreatetruecolor(300,200);//新建一个真彩色图像&#xff0c;默认背景是黑色&#xff0c;返回图像标识符。另外还有一个函数 imagecrea…

爱是天时地利的迷信

1 别人撒娇你撒娇2 据说套着这个白袋子晒鞋鞋就不会发黄了。。3 蚂蚁&#xff1a;为什么要欺负我&#xff01;4 这是天空的心电图吗5 有回应的喜欢真好 6 随主人这事儿原来是真的…7 被别人喜欢时的心理活动图自回忆专用小马甲你点的每个赞&#xff0c;我都认真当成了喜欢

如何做到 byte[] 和 十六进制 互转?

咨询区 alextansc&#xff1a;请问我如何实现将 byte[] 和 十六进制的string 进行互转&#xff1f;回答区 balrob&#xff1a;如果你的程序是基于 .NET5 的&#xff0c;可以使用 Convert 下新增的两个方法 ToHexString 和 FromHexString &#xff0c;参考下面两个方法的定义。/…

转载 Android解决java.lang.OutOfMemoryError: bitmap size exceeds VM budget

当图片过大&#xff0c;或图片数量较多时使用BitmapFactory解码图片会出java.lang.OutOfMemoryError: bitmap size exceeds VM budget&#xff0c;要想正常使用则需分配更少的内存&#xff0c;具体的解决办法是修改采样值BitmapFactory.Options.inSampleSize&#xff0c;例如&a…

Juniper Firewall多进单出配制实例

Technorati 标签: juniper,多进单出,配置实例,firewallJuniper firewall多進單出配置。想法是這樣的用一台firewall將這幾條ISP線路都接入&#xff0c;再通過一個trunk口出來&#xff0c;通過一台L2 switch劃分出幾個VLAN&#xff0c;分別對應不同的ISP線路。這樣做的好處就不多…

php js 复选框选中,为每个选中的复选框显示相同的一组问题。 (PHP和JS / Jquery)...

你可以这样做&#xff0c;它可以帮助你......HTMLfunction show_ques() {var i $(this).attr(id).substr(-1);if ($(this).is(":checked")) {//get total count of question listvar nQue $("#quelist").find("div[class^que]").length;var is…

刷题≠学好数学,近百位名校名师告诉你,数学是怎么学好的?

▲ 点击查看 数学是个神奇的科目&#xff0c;它存在着一种“梯次掉队”的现象。不是说你低年级的知识学好了&#xff0c;高年级的知识就一定能学好。相信大家都有这种体会&#xff1a;一二年级孩子成绩不相上下&#xff0c;但到三四年级的时候&#xff0c;有一批学生的数学成绩…

android 系统之ContentProvider

基于上一篇的数据库操作&#xff0c;又写了一个ContentProvider的示例。把SQLiter 的数据提供出去供别的项目进行访问。 这一篇的代码要求熟悉SQLiter 的API. 首先&#xff0c;我们编写一个类extents ContentProvider &#xff0c;重写他的方法。 URI 在http 中我们称为统一资源…

你是中层管理者?嗯,一个表面看似风光,实际却很 “鸡肋” 的重要岗位

这是头哥侃码的第246篇原创每年的六七月份&#xff0c;上海都会进入梅雨季节。这段时期的上海天气就好比大小姐的脾气&#xff0c;阴晴不定&#xff0c;完全看心情做事&#xff0c;心情好的时候&#xff0c;给你个阳光&#xff0c;让你的生活和休闲时光多一些灿烂&#xff0c;心…

20150203一些移动端H5小bug解决

都是一些我也不知道为什么会有的bug。 1. 在三星note2&#xff0c;小米2&#xff0c;页面加载后&#xff0c;页面有黑块. 那么提高被盖住的部分z-index。 2. iphone5 &#xff0c;ios7.0.4&#xff0c;上文字显示不出 那么就先hide&#xff0c;setTimeout几百毫秒再show

重温SQL——行转列,列转行(转:http://www.cnblogs.com/kerrycode/archive/2010/07/28/1786547.html)...

行转列&#xff0c;列转行是我们在开发过程中经常碰到的问题。行转列一般通过CASE WHEN 语句来实现&#xff0c;也可以通过 SQL SERVER 2005 新增的运算符PIVOT来实现。 用传统的方法&#xff0c;比较好理解。层次清晰&#xff0c;而且比较习惯。 但是PIVOT 、UNPIVOT提供的语法…

php正则获取标签,PHP通过正则匹配中文字符 过滤html标签 获取文本内容

正则匹配中文汉字根据页面编码不同而略有区别&#xff1a;GBK/GB2312编码&#xff1a;[x80-xff] 或 [xa1-xff]UTF-8编码&#xff1a;[x{4e00}-x{9fa5}]/u[php]$str "账单123";//GBK/GB2312使用&#xff1a;preg_match_all("/[\x80-\xff]/", $str, $chines…

python监控机票价格_喜欢旅行又怕吃土?让Python来爬取最便宜机票吧!

图源&#xff1a;videoblocks.com你喜欢旅行吗&#xff1f;这个问题通常会得到一个肯定的答案&#xff0c;随后引出一两个有关之前冒险经历的故事。大多数人都认为旅行是体验新文化和开阔视野的好方法。但如果问题是“你喜欢搜索机票的过程吗&#xff1f;”也许话题就到此为止了…

伤不起的指针

虽然知道怎么做&#xff0c;但是还是做一遍啦。结果调试了两个多小时&#xff0c;真崩溃。 /* * * * Filename: intlist.h * * Description: * * Version: 1.0 * Created: 09/16/2011 02:56:13 AM * Revision: none * Compiler: gc…

[禅悟人生]尊严非席, 不可卷起

日本江户时期是一个社会很不稳定的时期&#xff0c;浪人武士依仗强力横行无忌。 有一个著名的茶师跟随着一个显赫的主人。 有一天主人要去京城办事&#xff0c;舍不得离开茶师&#xff0c;就说&#xff0c;你跟我去吧&#xff0c;好每天给我泡茶。茶师很害怕&#xff0c;对主人…

要男女朋友有什么用?

1 题&#xff1a;我不要面子的嘛&#xff01;2 狗都有人给撑伞了。。3 这大概就是传说中的一见钟情吧4 5 南方人说话有多软糯6 男女朋友有什么用你点的每个赞&#xff0c;我都认真当成了喜欢

低代码应用创新成果——轴承行业数字化智造系统(含MES/ERP/WMS)

轴承是当代机械设备中一种不可或缺的零部件&#xff0c;广泛应用于汽车、铁路车辆及各类工业机械和家用电器等国民经济的重要领域&#xff0c;是一种节约能源、提高效率的伟大发明。轴承行业作为装备制造业的先锋&#xff0c;一直以来都走在数字化转型的前列&#xff0c;引领行…

城管威逼交警“让老百姓笑话”

城管威逼交警“让老百姓笑话” 发表时间:2010-07-05 09:15:42 来源&#xff1a;新华每日电讯我说两句(加入讨论) “给我们车贴罚单&#xff0c;你是不是不想干了&#xff1f;咱都是执法的&#xff0c;这一整&#xff0c;不让老百姓笑话吗&#xff1f;”这是沈阳市一位城管对正…

重点客户销售数据分析python_药品销售数据分析--python

一、数据分析的目的数据分析是指用适当的统计分析方法对收集来的大量数据进行分析&#xff0c;提取有用信息和形成结论而对数据加以详细研究和概括总结的过程。本篇文章中&#xff0c;假设以朝阳医院2018年销售数据为例&#xff0c;目的是了解朝阳医院在2018年里的销售情况&…