得到想要的
数据的简单与复杂,我已经无法理解了
在生活中经常处理数据,不管用什么方法,方式,我们都希望:容易、高效、简单,就是想方便,就是想做很少的事情,把我们的目的达到,得到我们想要的东西。
废话多了。。。
数组(Array)
数组是一个存储相同类型元素的固定大小的顺序集合。
声明数组:type[] arrayName;
数组的特点:
- 数组大小固定,不能伸缩
- 数值数组元素的默认值设置为零,而引用元素的默认值设置为 null
- 数组的索引从零开始
- 数组可读可写
- 数组要声明元素的类型
看一些简单的使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| eg:例子1 int[] a = new int[20];定义int数组 a [2] = 100; Debug.Log (a[2]); //返回 100 Debug.Log (a[5]); //返回 0
eg:例子2 string[] numbers = new string[10]; numbers[2] = "a"; numbers[3] = "b"; Debug.Log (numbers[0]); //返回 null Debug.Log (numbers[2]); //返回 a Debug.Log (numbers[5]); //返回 null
eg:例子3 string[] numbers = new string[]{"a","b","c"}; Debug.Log (numbers[2]); //返回 c Debug.Log (numbers[5]); //返回 引起错误
eg:例子4 string[] numbers = new string[]{"a","b","c"}; Debug.Log (numbers[2]); //返回 c Debug.Log (numbers[5]); //返回 引起错误
eg:例子5 string[] numbers = {"a","b","c"}; Debug.Log (numbers[0]); //返回 a
|
集合(Collection)
集合(Collection)类是专门用于数据存储和检索的类。这些类有:
动态数组(ArrayList)、列表(List)、字典(Dictionary)、哈希表(Hashtable)、堆栈(Stack)、队列(Queue)、点阵列(BitArray);
动态数组(ArrayList)
动态数组(ArrayList)代表了可被单独索引的对象的有序集合。
与数组不同的是,您可以使用索引在指定的位置添加和移除项目,动态数组会自动重新调整它的大小。它也允许在列表中进行动态内存分配、增加、搜索、排序各项。
特点:可以根据需要进行扩充
注意:ArrayList存在不安全类型与装箱拆箱的缺点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| eg:例子1 ArrayList numbers = new ArrayList();
//新增数据 numbers.Add(100); numbers.Add("AAA"); numbers.Add(true);
//删除数据 numbers.Remove(true);
//修改数据 numbers[1] = "修改数据";
//插入数据 numbers.Insert(2, "插入数据");
eg:例子2 ArrayList numbers = new ArrayList() { 200,5,50,100,800}; ArrayList letters = new ArrayList() { "b", "a", "z", "c", "d" ,"b" };
//排序 numbers.Sort(); //返回 5 50 100 200 800 letters.Sort(); //返回 a b b c d z
//反转 numbers.Reverse(); //返回 800 200 100 50 5 letters.Reverse(); //返回 z d c b b a
Clone()复制一个数组 。。。
|
具体方法:msdn传送
列表List
List是一个泛型列表。
可通过索引访问的对象的强类型列表, 提供用于对列表进行搜索、排序和操作的方法。
- list与ArrayList功能类似
- T如果为引用类型则要考虑装箱问题,就和ArrayList效果一样了
1 2 3 4 5 6
| List<T> dinosaurs = new List<T>()
eg:1 List<string> numbers = new List<string>(); numbers.Add("ZZZ"); //添加元素 numbers.RemoveAt(0);//移除下标为0的元素
|
具体方法:msdn传送
字典Dictionary
Dictionary表示键和值的集合,每个元素都是一个键值对。
是一个泛型列表。
- 键(key)是唯一的
- 键(key)和值(Value)可以是任何类型(包括自定义类型)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Dictionary<TKey,TValue> myDictionary = new Dictionary<TKey,TValue>();
eg:1 Dictionary<string, string> numbers = new Dictionary<string, string>() { {"id","100"}, {"name","aaa"}, {"lev","15"}, {"info","text text"} };
//添加数据 numbers.Add("sum","1000");
//移除数据 numbers.Remove("info");
|
具体方法:msdn传送
排序列表SortedList
SortedList 类代表了一系列按照键来排序的键/值对,这些键值对可以通过键和索引来访问。
- 如果您使用索引访问各项,则它是一个动态数组(ArrayList)
- 如果您使用键访问各项,则它是一个哈希表(Hashtable)。
- 集合中的各项总是按键值排序。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| eg:1 SortedList numbers = new SortedList() { {100,"aaa"}, {500,"aaa"}, {300,"aaa"}, {1,"aaa"}, {5,"bbb"} };
foreach (int index in numbers.Keys) { Console.Write(index + " " + numbers[index]+", "); }
1 aaa, 5 bbb, 100 aaa, 300 aaa, 500 aaa,
|
具体方法:msdn传送
哈希表(Hashtable)
Hashtable 类代表了一系列基于键的哈希代码组织起来的键/值对。它使用键来访问集合中的元素。
- HashTable可添加任意类型的元素
- HashTable添加时装箱,读取时拆箱
- HashTable不支持泛型
- Hashtable 的元素属于 Object 类型
1 2 3 4 5 6 7
| Hashtable ht = new Hashtable() { {"100","aaa"}, {"101","xxx"}, {"5","dd"}, {"50","cc"}, {"800","dd"} };
|
具体方法:msdn传送
栈Stack
堆栈(Stack)代表了一个后进先出的对象集合。
当您需要对各项进行后进先出的访问时,则使用堆栈。
当您在列表中添加一项,称为推入元素,当您从列表中移除一项时,称为弹出元素。
1 2 3 4 5 6 7 8 9 10 11
| Stack st = new Stack();
st.Push("axdsax"); st.Push("sad"); st.Push("adasxx"); st.Push("a4");
foreach (string c in st) { Console.Write(c + " "); }
|
具体方法:msdn传送
队列(Queue)
队列(Queue)代表了一个先进先出的对象集合。
当您需要对各项进行先进先出的访问时,则使用队列。
当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队。
1 2 3 4 5 6 7 8 9 10 11 12 13
| Queue que = new Queue();
//向队列加入元素 que.Enqueue("100"); que.Enqueue("105"); que.Enqueue("100"); que.Enqueue("500");
foreach (string c in que) { Console.Write(c + " "); } 100 105 100 500
|
具体方法:msdn传送
点阵列(BitArray)
BitArray 类管理一个紧凑型的位值数组,它使用布尔值来表示,其中 true 表示位是开启的(1),false 表示位是关闭的(0)。
当您需要存储位,但是事先不知道位数时,则使用点阵列。您可以使用整型索引从点阵列集合中访问各项,索引从零开始。
1 2 3 4 5 6 7 8 9 10 11 12 13
| // 创建两个大小为 8 的点阵列 BitArray ba1 = new BitArray(8); byte[] a = { 60 };
// 把值 60 存储到点阵列中 ba1 = new BitArray(a);
for (int i = 0; i < ba1.Count; i++) { Console.Write("{0} ", ba1[i]); } 返回:False False True True True True False False
|
具体方法:msdn传送