记录一下Unity C#常用的容器,方便写脚本时忘了容器类来查下 (- -||)

动态数组

List<T>

using System.Collections.Generic; //泛型容器的命名空间

类似C++的vector<T>。

有另一个非常相似的非泛型容器:ArrayList。ArrayList可以插入不同的值类型,在数据检索及存储时存在装箱与拆箱操作,容易带来性能消耗。

而List<T>则可以避免了装箱与拆箱动作的性能耗费,而且类型更安全。

双向链表

LinkedList<T>

using System.Collections.Generic; //泛型容器的命名空间

类似C++的list<T>。

额外的,LinkedListNode<T> 是双向链表的节点类型

队列

Queue<T>

using System.Collections.Generic; //泛型容器的命名空间

类似C++的queue<T>。

Queue<T>的底层是动态数组实现的队列

Stack<T>

using System.Collections.Generic; //泛型容器的命名空间

类似C++的stack<T>。

Stack<T>的底层是动态数组实现的栈

查找二叉树

SortedDictionary<K,V>

using System.Collections.Generic; //泛型容器的命名空间

类似C++的map<K,V>。

有另一个也非常相似功能的SortedList<K,V>,但是它的实现不是二叉树,而是每次插入都要排序的数组(真如其名),

所以插入删除速度都是O(n),而且其用处比较少(例如要求O(1)速度找出第几大),就不放出来了。

哈希表

HashSet<K> & Dictionary<K,V>

using System.Collections.Generic; //泛型容器的命名空间

类似C++的unorderd_set<K>和unorderd_map<K,V>。

额外的,KeyValuePair<K,V> 是键/值对结构,用于辅助Dictionary<K,V>结构。

位数组

BitArray

using System.Collections; //非泛型容器的命名空间

类似C++的bitset。

原生数组

NativeArray<T>

using Unity.Collections; //NativeArray<T>的命名空间

NativeArray<T>只能容纳值对象。

在创建的时候除了指定length外,还需要指定allocator模式:Temp(临时),TempJob(Job内临时),Persistent(持久)

//示例,容量233,临时内存
NativeArray<T> array = new NativeArray<T>(233,Allocator.Temp);

这是Unity官方提供的容器类,它所指定的allocator模式可能是类似Temp对应栈内存分配,Persistent对应堆内存分配的方式。

它只是简单的封装一下数组,本质和普通的struct数组似乎没什么区别,都能内存连续使cpu更容易命中缓存。

但是使用NativeArray能更加强调这是在使用值类型的数组,而非类对象数组。避免下面情况出现:

//不能直接分辨ST是结构体还是类
ST[] array = new ST[1024];
//错把st当作类对象来修改,实际上这样只是拷贝一份ST然后再对拷贝出来的进行修改
var st = array[0];
st.x = 0;

Unity C#笔记 容器类的更多相关文章

  1. C#程序员整理的Unity 3D笔记(十):Unity3D的位移、旋转的3D数学模型

    遇到一个想做的功能,但是实现不了,核心原因是因为对U3D的3D数学概念没有灵活吃透.故再次系统学习之—第三次学习3D数学. 本次,希望实现的功能很简单: 如在小地图中,希望可以动态画出Player当前 ...

  2. [Unity Shader笔记]渲染路径--Forward渲染路径

    [Unity Shader笔记]渲染路径--Forward渲染路径 (2014-04-22 20:08:25) 转载▼ 标签: shader unity renderingpath forward 游 ...

  3. unity入门笔记

    我于2010年4月1日硕士毕业加入完美时空, 至今5年整.刚刚从一家公司的微端(就是端游技术+页游思想, 具体点就是c++开发, directX渲染, 资源采取所需才会下载)项目的前端主程职位离职, ...

  4. [Unity菜鸟] 笔记2 —— 问题篇

    记录在学习<Unity 3.x 游戏开发 经典教材>时遇到的各种问题与笔记 1. 初始不能降低Terrain的高度,需要到Terrain设置的第二个按钮中将Height从0调高 (注意:最 ...

  5. 微软企业库Unity学习笔记

    本文主要介绍: 关于Unity container配置,注册映射关系.类型,单实例.已存在对象和指出一些container的基本配置,这只是我关于Unity的学习心得和笔记,希望能够大家多交流相互学习 ...

  6. Unity 黑暗之光 笔记 第三章

    第三章 角色控制   1.创建游戏运行场景并导入素材资源 2.创建和管理标签 1 //const 表明这个是一个共有的不可变的变量 2 public const string ground = &qu ...

  7. Unity 黑暗之光 笔记 第一章

    第一章 设计游戏开始进入场景 1.设置相机视野同步 选中要调整的相机 GameObject - Align With View(快捷键 Ctrl + Shift + F)

  8. Unity学习笔记

    『 知识点』 [射线] 射线检测碰撞 『游戏实战』 个例 [E]<愤怒的小鸟> 资源 免费Unity基础教程(中文电子书) [E] noobtus(Unity游戏教程)

  9. Unity学习笔记(一)——基本概念之场景(Scene)

    场景,顾名思义就是我们在游戏中所看到的物品.建筑.人物.背景.声音.特效等,基本上和我们玩游戏时所看到的游戏“场景”是同一个概念. Unity 3D中,“场景”是一个视图,我们通过“场景”这个视图,来 ...

随机推荐

  1. 分布式服务通讯框架XXL-RPC

    <分布式服务通讯框架XXL-RPC>    一.简介 1.1 概述 XXL-RPC 是一个分布式服务通讯框架,提供稳定高性能的RPC远程服务调用功能.现已开放源代码,开箱即用. 1.2 特 ...

  2. bootstrap-table+x-editable入门

    Bootstrap-table 快速入门bootstrap-table----我的表单不可能这么帅. Table of contents Quick start Why use it What's i ...

  3. hdu-2683 TCE-frep number system---完全数+二项展开式

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2683 题目大意: g(n)是n的因子和 两种操作: A a b 查询a b区间有多少个n满足上式. ...

  4. 【转】Sentry--错误日志收集

    简介 Sentry是一个实时事件日志记录和汇集的日志平台,其专注于错误监控,以及提取一切事后处理所需的信息.他基于Django开发,目的在于帮助开发人员从散落在多个不同服务器上的日志文件里提取发掘异常 ...

  5. Win32项目生成的程序exe图标显示异常的问题

    问题 如图: 用VS2013生成exe执行文件时发现的问题,起初以为是没添加ico图像的最小尺寸,后来查看ico并不是这个问题. Baidu.Google了半天找到原因:文件资源管理器的图标缓存bug ...

  6. Linux时间子系统之(四):timekeeping

    专题文档汇总目录 Notes:timekeeping模块的狠心数据结构是timekeeper,它维护了系统不同类型时钟的时间值,并且介绍了获取不同类型时钟时间的函数. clocksource切换通过c ...

  7. 豆瓣API

    Api V2 索引 图书Api V2 电影Api V2 音乐Api V2 同城Api V2 广播Api V2 用户Api V2 日记Api V2 相册Api V2 线上活动Api V2 论坛Api V ...

  8. linux下属主目录的作用

    1. /home 用户目录  系统中每一用户都有一个目录 ,被称为主目录,家目录  创建一个普通用户,系统就会在 /home 创建一个以用户为名字的目录2. /tmp 临时文件目录 系统在运行程序中产 ...

  9. 理解Flexbox弹性盒子

    http://www.w3cplus.com/css3/understanding-flexbox-everything-you-need-to-know.html参考文档 1:要开始使用Flexbo ...

  10. ASP.NET Core 2 学习笔记(一)

    来势汹汹的.NET Core似乎要取代.NET Framework,ASP.NET也随之发布.NET Core版本.虽然名称沿用ASP.NET,但相对于ASP.NET确实有许多架构上的差异,可以说除了 ...