• Unity C#笔记 容器类


    记录一下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;
    
  • 相关阅读:
    #C++初学记录(sort函数)
    #C++初学记录(贪心算法#结构体#贪心算法)
    #C++初学记录(初识汉诺塔)
    vuex中使用多模块时,如果不同模块中action有名字冲突该如何解决
    vue中二次封装别人组件,动态传属性使用v-bind="$attrs" 和 v-on="$listeners"
    在vue.config.js项目中配置proxy解决跨域问题
    Vue里报错:Maximum call stack size exceeded
    git报错:pre-commit hook failed (add --no-verify to bypass)
    十大排序算法,用JS写出来
    基数排序(JS代码)
  • 原文地址:https://www.cnblogs.com/KillerAery/p/10586659.html
Copyright © 2020-2023  润新知