数据结构
本节介绍的数据结构包括:数组、字符串、元组、枚举、结构体。
一、数组⚓︎
01 数组概述⚓︎
数组:具有相同类型的数据的集合,通过 type[] arrayName
声明数组。
数组的初始化:通过new
关键字对数组进行初始化。
数组的赋值:可以在初始化或通过循环结构赋值。
数组的访问:数组具有下表索引(从0开始),可以通过下标直接读取,即 arrayName[index]
Note
- C#中的数组是引用类型;
System.Array
是所有数组类型的抽象基类型, 所有数组都会实现IList
和IEnumerable
;- 数组元素可以是任何类型,其中包括数组类型(构成多维数组);
- 对于值类型,使用默认值初始化数组元素;
- 对于引用类型,包括不可为
null
的类型,都具有值null
; - 对于可为
null
的类型,HasValue
被设置为false
,元素将设置为null
.
02 定义数组⚓︎
一维数组⚓︎
示例:
数组声明与赋值
// 声明数组
type[] arrayName; // int[] num;
// 初始化数组
type[] arrayName = new type[len]; // int[] num = new int[5];
// 初始化并赋值
type[] arrayName = new type[]{val0, val1, ...,valLen}; // int[] num = new int[]{0,1};
type[] arrayName = new type[len]{val0, val1, ...,valLen}; // int[] num = new int[2]{0,1};
// 隐式类型
var arrayName = new type[];
// 随机访问
arrayName[index] = 10; // num[2]=10;
Consle.WriteLine(arrayName[index]); // Consle.WriteLine(num[2]);
二维数组⚓︎
03 数组等值判断⚓︎
04 数组常用操作⚓︎
二、字符串⚓︎
01 字符串概述⚓︎
字符串可以看做是字符的数组,同样支持随机访问。
Note
- C#中的字符串是引用类型.
- 在 C# 中,
string
关键字是System.String
的别名。 因此,String
和string
是等效的.
02 定义字符串⚓︎
03 字符串等值判断⚓︎
04 字符串常用操作⚓︎
三、元组⚓︎
01 元组概述⚓︎
Note
- 元组是值类型;
- == 和 != 不会考虑元组的字段名称,只会比较元素值;
System.ValueTuple
和System.Tuple
都可用于创建元组,但二者不同,主要区别如下:System.ValueTuple
是结构体struct
;System.Tuple
是类class
;System.ValueTuple
类型是值类型;System.Tuple
类型是引用类型;System.ValueTuple
类型是可变的;System.Tuple
类型是不可变的;System.ValueTuple
类型的数据成员是字段;System.Tuple
类型的数据成员是属性。
02 定义元组⚓︎
// 指定每个元素的类型
(double, int) t1 = (4.5, 3);
Console.WriteLine($"Tuple with elements {t1.Item1} and {t1.Item2}.");
// 指定每个元素的类型和字段名
(double Sum, int Count) t2 = (4.5, 3);
Console.WriteLine($"Sum of {t2.Count} elements is {t2.Sum}.");
// 使用var隐式类型推断
var t = (Sum: 4.5, Count: 3);
Console.WriteLine($"Sum of {t.Count} elements is {t.Sum}.");
// 先初始化再赋值
var sum = 4.5;
var count = 3;
var t = (sum, count);
03 元组等值判断⚓︎
(int a, byte b) left = (5, 10);
(long a, int b) right = (5, 10);
Console.WriteLine(left == right); // output: True
Console.WriteLine(left != right); // output: False
var t1 = (A: 5, B: 10);
var t2 = (B: 5, A: 10);
Console.WriteLine(t1 == t2); // output: True
Console.WriteLine(t1 != t2); // output: False
04 元组常用操作⚓︎
四、枚举⚓︎
01 枚举概述⚓︎
Note
- 枚举类型是值类型.
System.Enum
类型是所有枚举类型的抽象基类.- 对于任何枚举类型,枚举类型与其基础整型类型之间存在显式转换.
- 如果将枚举值转换为其基础类型,则结果为枚举成员的关联整数值.
02 定义枚举⚓︎
enum Season
{
Spring,
Summer,
Autumn,
Winter
}
// 显示指定关联常数值类型,并指定常数值
enum ErrorCode : ushort
{
None = 0,
Unknown = 1,
ConnectionLost = 100,
OutlierReading = 200
}
03 枚举等值判断⚓︎
04 枚举常用操作⚓︎
五、结构体⚓︎
01 结构体概述⚓︎
Note
- C#结构体是值类型,内存分配在栈中,访问速度相对更快.
- 结构体可带有方法、字段、索引、属性、运算符方法和事件.
- 结构体可定义构造函数,但不能定义析构函数.
- 结构体不能继承与被继承.
- 结构体可以实现接口.
02 定义结构体⚓︎
struct StructName
{
identifier type attrName;
// more
}
// 示例
struct Books
{
public string title;
public string author;
public string subject;
public int book_id;
};
03 结构体等值判断⚓︎
04 结构体常用操作⚓︎
总结⚓︎
数据结构 | 类型 |
---|---|
数组 | 引用类型 |
字符串 | 引用类型 |
元组 | 值类型 |
枚举 | 值类型 |
结构体 | 值类型 |