更深入学习了数据类型的相关知识
数据范围
可使用int.MinValue
和int.MaxValue
来获取int
类型的数据范围。
1 | 几种基础整型范围 |
1 | 无符号整型范围 |
1 | 浮点数范围: |
decimal
会比double
占用更多的内存空间,但计算小数更精准,不会出现精度丢失,适合用于金融计算等应用。
float 和 double 值在内部以二进制 (base 2) 格式存储,而 decimal 以十进制 (base 10) 格式存储。
decimal
的底层实现方式后面再开个博文氵一下。
引用类型
个人理解
也就是说int[] data
只是创建了一个指针?它并没有指向任何存储有数据的内存空间。
后面的new
才是分配一个存储空间,并且同时让data
指向这个空间。
所以如果创建了一个空引用,它是没有大小的。
Console.Write(data.Length);
会直接编译失败,因为它是空的,并不会返回0。
个人理解
实际上int[] data ={1,2,3};也可以
可能也是系统开辟了一个存储{1,2,3}的内存空间,然后再让data指向它。
类型转换
数字转成string
1 | int num = 1; |
每个数据类型都有ToString()方法。
string转成数字
Parse()
1 | string str = "5"; |
大部分数字数据类型都有Parse()
方法。
比起Parse()
更推荐使用TryParse()
。
TryParse()
TryParse()
可同时执行多项操作
- 它会尝试将字符串分析成给定的数字数据类型
- 如果成功,它会将转换后的值存储在out参数中
- 它将返回
bool
,指示操作是成功还是失败
1 | string legalValue = "520"; |
Covert类
还可以使用Convert
类中的方法将string
转成int
。
1 | string value1 = "5"; |
强制类型转换
在需要转换的变量前用括号把目的类型标记一下(跟C一样)。
1 | double xFloat = 1.2; |
数组
排序
Array.Sort(pallets)
底层实现发现用了叫IntrospectiveSort
(内省排序)的排序方法。
特点:
- 如果划分的大小小于16个元素,对该划分使用插入排序
- 如果划分的大小超过2LogN, N是数组长度,那么就使用堆排序
- 如果划分的大小介于两者之间,则在该划分上继续使用快速排序
避免了数据量小时用快排杀鸡用牛刀,数据量大时快排递归层数深,最坏情况时间复杂度会到O(n^2)
(找个时间手搓实现一遍
1 | string[] pallets = { "B14", "A11", "B12", "A13" }; |
反转
反转来了
Array.Reverse(pallets)
反转数组中的元素。
删除
Array.Clear(pallets, 0, 2);
表示删除从索引0开始的两个元素。
删除并不是释放内存空间,而是把这块区域标成null,此时pallets[0]仍然能正常访问。
sad,这样不是很损失性能?可能List能删除元素吧?
调整大小
Array.Resize(ref pallets, 6);
将数组大小调整至6个元素。
此时将调过引用(使用ref关字)传入
pallets
数组的Resize()
方法。在某些情况下,方法会要求按值(默认)或按引用(使ref关字)来传递参数。要解释此操作的必要性,需花时间详细阐释.NET中对象的管理方式。很遗憾,这超出了本模块的范围。如果有疑问,建议查看Intellisense
或MicrosoftDocs
,获取有关如何正确调用给定方法的示例。
呃呃,还要我自己去查ref
什么意思。
传入引用?是我理解的那个C++的引用吗?