【Unity 3D】C#中数组、集合、栈、队列、哈希表、字典的讲解(附测试代码)

简介: 【Unity 3D】C#中数组、集合、栈、队列、哈希表、字典的讲解(附测试代码)

觉得有帮助请点赞关注收藏~~~

一、数组

数组时有序的元素序列,存在有限个相同的变量的集合叫做数组名,组成数组二点各个变量称为数组的分量,又称为数组的元素,有时也称为下标变量,用于区分数组的各个元素的数组编号称为下标。

初始化数组

datatype [] arrayname

datetype指定存储在数组中的元素的类型

[]指定数组维度

double[] balance =new double[10];

数组赋值

可以通过使用数组的下表给一个单独的数组元素赋值

double[] balance =new double[10];

balance[0]=4500.0;

也可以再声明数组的同时给数组赋值

double[] balance ={2333.0,5333.0,24400.0};

访问数组元素

元素是通过数组名称[下标]这种方式访问的,这是通过把元素的下标放置在数组名称后的方括号中实现的

double salary=balance[4];

测试代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test_9_1 : MonoBehaviour
{
    void Start()
    {
        int[] n = new int[5]; /* n 是一个带有 10 个整数的数组 */
        int i, j;
        /* 初始化数组 n 中的元素 */
        for (i = 0; i < 5; i++)
        {
            n[i] = i + 100;
        }
        /* 输出每个数组元素的值 */
        for (j = 0; j < 5; j++)
        {
            Debug.Log("元素[{" + j + "}] = {" + n[j] + "}");
        }
    }
}

 

多维数组

多维数组最简单的形式是二维数组,本质上是一个一维数组的列表

数组中每个元素用a[i,j]来表示的 i是行 j是列

测试代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test_9_2 : MonoBehaviour
{
    void Start()
    {
        /* 一个带有 5 行 2 列的数组 */
        int[,] a = new int[5, 2] { { 0, 1 }, { 2, 3 }, { 4, 5 }, { 6, 7 }, { 8, 9 } };
        int i, j;
        /* 输出数组中每个元素的值 */
        for (i = 0; i < 5; i++)
        {
            for (j = 0; j < 2; j++)
            {
                Debug.Log("a[{" + i + "},{" + j + "}] = {" + a[i, j] + "}");
            }
        }
    }
}

二、集合

集合Collection是专门用于存储数据和检索数据的类,分别提供了对栈 队列 列表 哈希表的支持 大多数集合实现了相同的接口

ArrayList

该对象的大小是按照其存储的数据的多少动态扩充与收缩的,所以在声明ArrayList对象时并不需要指定它的长度

ArrayList list1=new ArrayList();
list1.Add("zhangsan");
list1.Add("5333");

从上面可以看出 ArrayList允许插入不同类型的数据,这也导致容易产生安全问题

List

List大部分操作与ArrayList相同,但是最关键的区别在于List在声明的时候需要为集合内的元素声明对象类型

List<String> list=new List<String>();

队列

队列代表了一个先进先出的对象集合,如果需要对各项元素进行先进先出的访问,则使用队列,在列表中添加一项,称为入队,从列表中删除一项,称为出队

下面列出Queue类的常用属性和方法

Count 获取Queue中包含的元素个数

Clear() 从Queue中删除所有的元素

Contains() 判断某个元素是否在Queue中

Dequeue() 删除并返回在Queue的开头的对象

Enqueue() 向Queue的末尾添加一个对象

ToArray() 复制Queue到一个新的数组中

TrimToSize()  设置容量为Queue中元素的个数

测试代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test_9_3 : MonoBehaviour
{
    void Start()
    {
        Queue q = new Queue();//初始化队列
        q.Enqueue('A');//添加元素
        q.Enqueue('B');
        Debug.Log("添加元素前:");
        foreach (char item in q)
        {
            Debug.Log(item);
        }
        q.Enqueue('C');
        Debug.Log("添加元素后:");
        foreach (char item in q)
        {
            Debug.Log(item);
        }
        q.Dequeue();//删除元素
        Debug.Log("删除元素后:");
        foreach (char item in q)
        {
            Debug.Log(item);
        }
    }
}

堆栈

堆栈代表了一个后进先出的对象集合,如果需要对各项进行后进先出的访问,则使用堆栈,在列表中添加一项称为推入元素,从列表中删除一项,称为弹出元素

下面是堆栈的常用属性和方法

Count 获取Stack中包含的元素个数

Peek() 返回在Stack顶部的对象 但不删除它

Pop()  删除并返回在Stack顶部的对象

Push()  向Stack的顶部添加一个对象

ToArray() 复制Stack到一个新的数组中

测试代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test_9_4 : MonoBehaviour
{
    void Start()
    {
        Stack st = new Stack();//初始化队列
        st.Push('A');//添加元素
        st.Push('B');
        Debug.Log("添加元素前:");
        foreach (char item in st)
        {
            Debug.Log(item);
        }
        st.Push('C');
        Debug.Log("添加元素后:");
        foreach (char item in st)
        {
            Debug.Log(item);
        }
        char ch =(char)st.Peek();//返回在 Stack 的顶部的对象,但不移除它
        Debug.Log("返回在 Stack 的顶部的对象:"+ch);
        st.Pop();//删除元素
        Debug.Log("删除元素后:");
        foreach (char item in st)
        {
            Debug.Log(item);
        }
    }
}

哈希表

哈希表类代表了一系列基于键的哈希代码组织起来的键值对,它使用键访问集合中的元素

如果使用键访问元素,则使用哈希表,而且可以识别一个有用的键值,哈希表中的每一项都有一个键值对,键用于访问集合中的项目

常用属性与方法如下

Count  包含键值对个数

IsFixedSize 判断哈希表是否具有固定大小

IsReadOnly 判断哈希表是否只读

Item 获取或设置与指定的键相关的值

Keys  获取一个ICollection 包含哈希表中的键

Values 获取一个ICollection  包含哈希表中的值

Add() 向哈希表中添加一个带有指定的键和值的元素

ContainsKey() 判断哈希表是否包含指定的键

Contains Value() 判断哈希表是否包含指定的值

Remove()  从哈希表中删除带有指定的键的元素

测试代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test_9_5 : MonoBehaviour
{
    void Start()
    {
        Hashtable ht = new Hashtable();
        ht.Add("001", "张三");
        ht.Add("002", "李四");
        if (ht.ContainsValue("李四"))
        {
            Debug.Log("这个名字已经添加到名单上了");
        }
        else
        {
            ht.Add("003", "王五");
        }
        // 获取键的集合 
        ICollection key = ht.Keys;
        foreach (string k in key)
        {
            Debug.Log(k + ": " + ht[k]);
        }
    }
}

字典

字典是一种可以让我们通过索引号查询到特定数据的数据结构类型

测试代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test_9_6 : MonoBehaviour
{
    void Start()
    {
        Dictionary<string, string> students = new Dictionary<string, string>();
        students.Add("S001", "张三");//添加
        students.Add("S002", "李四");//添加
        students.Add("S003", "王五");//添加
        students["S003"] = "赵六";//修改
        students.Remove("S000"); //删除
        foreach (string key in students.Keys)//查询Keys
            Debug.Log(key);
        foreach (string value in students.Values)//查询Values
            Debug.Log(value);
        foreach (KeyValuePair<string, string> stu in students)  //查询Keys和Values
            Debug.Log("Key:" + stu.Key + "  Name:" + stu.Value);
    }
}

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
7天前
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
|
2月前
|
存储 C# 索引
C# 一分钟浅谈:数组与集合类的基本操作
【9月更文挑战第1天】本文详细介绍了C#中数组和集合类的基本操作,包括创建、访问、遍历及常见问题的解决方法。数组适用于固定长度的数据存储,而集合类如`List<T>`则提供了动态扩展的能力。文章通过示例代码展示了如何处理索引越界、数组长度不可变及集合容量不足等问题,并提供了解决方案。掌握这些基础知识可使程序更加高效和清晰。
81 2
|
25天前
|
测试技术 C# 数据库
C# 单元测试框架 NUnit 一分钟浅谈
【10月更文挑战第17天】单元测试是软件开发中重要的质量保证手段,NUnit 是一个广泛使用的 .NET 单元测试框架。本文从基础到进阶介绍了 NUnit 的使用方法,包括安装、基本用法、参数化测试、异步测试等,并探讨了常见问题和易错点,旨在帮助开发者有效利用单元测试提高代码质量和开发效率。
136 64
|
22天前
|
缓存 监控 数据挖掘
C# 一分钟浅谈:性能测试与压力测试
【10月更文挑战第20天】本文介绍了性能测试和压力测试的基础概念、目的、方法及常见问题与解决策略。性能测试关注系统在正常条件下的响应时间和资源利用率,而压力测试则在超出正常条件的情况下测试系统的极限和潜在瓶颈。文章通过具体的C#代码示例,详细探讨了忽视预热阶段、不合理测试数据和缺乏详细监控等常见问题及其解决方案,并提供了如何避免这些问题的建议。
46 7
|
23天前
|
Kubernetes 测试技术 持续交付
C# 一分钟浅谈:集成测试与系统测试
【10月更文挑战第19天】本文详细介绍了集成测试和系统测试的概念、目的及其在软件开发中的重要性。通过分析常见问题和易错点,结合代码示例,探讨了如何通过代码规范、自动化测试和持续集成等方法提高测试效果,确保软件质量和可靠性。
46 1
|
24天前
|
测试技术 C# 数据库
C# 一分钟浅谈:测试驱动开发 (TDD) 实践
【10月更文挑战第18天】测试驱动开发(TDD)是一种软件开发方法论,强调先编写测试代码再编写功能代码,以确保代码质量和可维护性。本文从 TDD 的基本概念入手,详细介绍了其核心步骤——编写测试、运行测试并失败、编写代码使测试通过,以及“红绿重构”循环。文章还探讨了 TDD 的优势,包括提高代码质量、促进设计思考、减少调试时间和文档化。此外,文中分析了常见问题及解决方案,如测试覆盖率不足、测试代码过于复杂、忽视重构和测试依赖过多,并通过一个简单的计算器类的代码案例,展示了 TDD 的实际应用过程。
33 1
|
1月前
|
开发框架 NoSQL MongoDB
C#/.NET/.NET Core开发实战教程集合
C#/.NET/.NET Core开发实战教程集合
|
2月前
|
测试技术 C# 开发工具
C# 标准性能测试
本文介绍如何使用 BenchmarkDotNet 工具进行性能测试。通过 GitHub 代码示例展示如何安装并应用此工具,对函数或静态方法进行精确的性能分析。首先需通过 NuGet 安装 BenchmarkDotNet,然后在测试函数上添加 `[Benchmark]` 特性,并使用 `BenchmarkRunner.Run&lt;&gt;();` 进行测试。测试过程中包括 Pilot、Warmup 和 Target 等阶段,并提供 Mean、Error 和 StdDev 等统计信息。
54 3
C# 标准性能测试
|
2月前
|
Python
numpy | 插入不定长字符数组测试OK
本文介绍了如何在numpy中创建和操作不定长字符数组,包括插入和截断操作的测试。
|
2月前
|
SQL 开发框架 安全
并发集合与任务并行库:C#中的高效编程实践
在现代软件开发中,多核处理器普及使多线程编程成为提升性能的关键。然而,传统同步模型在高并发下易引发死锁等问题。为此,.NET Framework引入了任务并行库(TPL)和并发集合,简化并发编程并增强代码可维护性。并发集合允许多线程安全访问,如`ConcurrentQueue&lt;T&gt;`和`ConcurrentDictionary&lt;TKey, TValue&gt;`,有效避免数据不一致。TPL则通过`Task`类实现异步操作,提高开发效率。正确使用这些工具可显著提升程序性能,但也需注意任务取消和异常处理等常见问题。
48 1