C#基础之数据结构

前言

数据结构是计算机存储、组织数据的方式。是指相互之间存在一种或多种特定关系的数据元素的集合,即带“结构”的数据元素的集合。“结构”就是指数据元素之间存在的关系,分为逻辑结构存储结构

逻辑结构指数据元素之间的前后关系。包括集合(同属一个集合)、线性结构(一对一的相互关系)、树形结构(一对多的相互关系)、图形结构(多对多的相互关系)

存储结构:数据在计算机存储空间中的存放形式。常用的存储结构有顺序存储、链式存储、索引存储和哈希存储等。

字符串

字符串是值为文本的 String 类型对象。文本在内部存储为 Char 对象的依序只读集合。String是引用类型,且使用频率非常高的引用类型。

字符串的一些示例:

// 声明字符串变量并赋值
string content = "C#语言基础";
// 声明字符串变量并赋值为null,若访问则会导致异常
string nullContent = null;

//声明字符串变量并赋值为空字符串,长度为零
string emptyContent = string.Empty;
//声明字符串变量并赋值为空字符串,长度为零
string emptContent = "";

属性与常用方法

数组

数组是将同一类型的多个变量存储在一个数组数据结构中。通过指定的索引来访问数组的元素。数组从零开始建立索引,即数组索引从零开始。数组包括一维数组、多维数组和交错数组。

数组具有以下属性:

1、声明数组变量时设置维度数。

2、交错数组是数组数组,每个成员数组的默认值为null。

3、数组从零开始编制索引,包含 n 元素的数组从 0 索引到 n-1。

4、数组元素可以是任何类型,其中包括数组类型。

5、数组类型是从抽象的基类型 Array 派生的引用类型。

数组的一些示例:

// 声明一个由5个整数组成的一维数组
int[] singleArray = new int[5];

// 声明和设置数组元素值
int[] setSingleArray = [1, 2, 3, 4, 5, 6];

// 声明一个二维数组
int[,] multiDimensionalArray = new int[2, 3];

// 声明和设置二维数组元素值
int[,] setMultiDimensionalArray2 = { { 1, 2, 3 }, { 4, 5, 6 } };

// 声明一个交错数组
int[][] jaggedArray = new int[6][];
// 设置交错数组结构中第一个数组的值。
jaggedArray[0] = [1, 2, 3, 4];
// 访问元素
for (int i = 0; i < setSingleArray.Length; i++)
{
    Console.WriteLine(list[i]);
}

一维数组:是一系列相似元素。可以通过其索引访问元素。索引是序列中的顺序位置,数组中的第一个元素位于索引0。

多维数组:具有多个维度。对于多维数组,遍历元素的方式为:首先递增最右边维度的索引,然后是它左边的一个维度,以此类推,向最左的索引遍历元素。

交错数组:是一个数组,其元素是数组,大小可能不同。交错数组有时称为“数组的数组”。

集合

集合与数组比较类似,都用于存放一组值,但集合中提供了特定的方法能直接操作集合中的数据,并提供了不同的集合类来实现特定的功能。集合可以动态的对集合的长度进行定义和维护。所有集合类或与集合相关的接口命名空间都是 System.Collection。

可索引集合:是一个可以使用其索引访问每个元素的集合。其索引是序列中在它之前的元素数。

示例:


// 声明一个集合
List<string> fruits = ["apple", "pear", "peach", "strawberry"];
// 循环访问每个元素
foreach (var fruit in fruits)
{
    Console.Write(fruit + " ");
}

键值对集合: 使用字典集合,可通过使用每个元素的键访问集合中的元素。每次对字典的添加都包含一个值和与其关联的键。

示例:

// 声明一个字典集合变量
Dictionary<string, string> elements = new Dictionary<string, string>();
elements.Add("A", "90");
elements.Add("B", "80");
elements.Add("C", "70");
// 循环访问每个键值
foreach (string element in elements.Keys)
{
    Console.WriteLine("key: " + element);
    Console.WriteLine("values: " + elements[element]);
}

泛型

泛型是为所存储或使用的一个或多个类型具有占位符(类型形参)的类、结构、接口和方法。泛型集合类可以将类型形参用作其存储的对象类型的占位符;类型形参呈现为其字段的类型和其方法的参数类型。泛型方法可将其类型形参用作其返回值的类型或用作其形参之一的类型。 

// 定义泛型类
public class GenClass<T>
{
   // 定义泛型属性
    public T Genname { get; set; }
}


public class A
{
    // 定义泛型方法
    public T Go<T>(T arg)
    {
        T temp = arg;
        // 返回
        return temp;
    }
}

// 调用
GenClass<string> gString = new GenClass<string>();
gString.Genname = "A string";

GenClass<int> gInt = new GenClass<int>();
gInt.Genname = 12;

术语

1、泛型类型定义是用作模板的类、结构或接口声明,带有可包含或使用的类型的占位符。

2、泛型类型参数或类型参数)是泛型类型或方法定义中的占位符。

3、构造泛型类型(或 构造类型)是为泛型类型定义的泛型类型形参指定类型的结果。

4、泛型类型实参是被泛型类型形参所替代的任何类型。

优点

1、类型安全,泛型将类型安全的负担从你那里转移到编译器。

2、性能更好,无需对值类型进行装箱。

3、简化动态生成代码。

4、代码更少且可以更轻松地重用代码

缺点

1、不支持上下文绑定的泛型类型。

2、枚举不能具有泛型类型形参。

3、轻量动态方法不能是泛型。

***后续将对泛型详解介绍***

小结

 以上对C#常用的字符串、数组、集合、泛型数据结构类型进行了介绍,希望对大家的学习C#基础知识有一定的参考借鉴价值。

  • 21
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fountyuan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值