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

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 【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);
    }
}

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

相关文章
|
数据采集 机器学习/深度学习 大数据
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
这篇文章详细介绍了C3D架构在行为检测领域的应用,包括训练和测试步骤,使用UCF101数据集进行演示。
812 1
行为检测代码(一):超详细介绍C3D架构训练+测试步骤
|
10月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
624 1
|
11月前
|
算法 IDE Java
Java 项目实战之实际代码实现与测试调试全过程详解
本文详细讲解了Java项目的实战开发流程,涵盖项目创建、代码实现(如计算器与汉诺塔问题)、单元测试(使用JUnit)及调试技巧(如断点调试与异常排查),帮助开发者掌握从编码到测试调试的完整技能,提升Java开发实战能力。
933 0
|
存储 监控 算法
解析公司屏幕监控软件中 C# 字典算法的数据管理效能与优化策略
数字化办公的时代背景下,企业为维护信息安全并提升管理效能,公司屏幕监控软件的应用日益普及。此软件犹如企业网络的 “数字卫士”,持续记录员工电脑屏幕的操作动态。然而,伴随数据量的持续增长,如何高效管理这些监控数据成为关键议题。C# 中的字典(Dictionary)数据结构,以其独特的键值对存储模式和高效的操作性能,为公司屏幕监控软件的数据管理提供了有力支持。下文将深入探究其原理与应用。
391 4
|
9月前
|
安全 Java 测试技术
《深入理解Spring》单元测试——高质量代码的守护神
Spring测试框架提供全面的单元与集成测试支持,通过`@SpringBootTest`、`@WebMvcTest`等注解实现分层测试,结合Mockito、Testcontainers和Jacoco,保障代码质量,提升开发效率与系统稳定性。
|
10月前
|
人工智能 边缘计算 搜索推荐
AI产品测试学习路径全解析:从业务场景到代码实践
本文深入解析AI测试的核心技能与学习路径,涵盖业务理解、模型指标计算与性能测试三大阶段,助力掌握分类、推荐系统、计算机视觉等多场景测试方法,提升AI产品质量保障能力。
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
测试技术 Go 开发者
如何为 gRPC Server 编写本地测试代码
本文介绍了如何使用 Go 语言中的 gRPC 测试工具 **bufconn**,通过内存连接实现 gRPC Server 的本地测试,避免端口冲突和外部依赖。结合示例代码,讲解了初始化内存监听、自定义拨号器及编写测试用例的完整流程,并借助断言库提升测试可读性与准确性。适用于单元及集成测试,助力高效开发。
280 1
|
12月前
|
安全 Java 测试技术
Java 项目实战中现代技术栈下代码实现与测试调试的完整流程
本文介绍基于Java 17和Spring技术栈的现代化项目开发实践。项目采用Gradle构建工具,实现模块化DDD分层架构,结合Spring WebFlux开发响应式API,并应用Record、Sealed Class等新特性。测试策略涵盖JUnit单元测试和Testcontainers集成测试,通过JFR和OpenTelemetry实现性能监控。部署阶段采用Docker容器化和Kubernetes编排,同时展示异步处理和反应式编程的性能优化。整套方案体现了现代Java开发的最佳实践,包括代码实现、测试调试
388 0

热门文章

最新文章