Office中国论坛/Access中国论坛

标题: 【原创】关于:一维零基数组,多个创建方式(茴字有几个写法) [打印本页]

作者: faunus    时间: 2014-2-23 10:32
标题: 【原创】关于:一维零基数组,多个创建方式(茴字有几个写法)
回归本质,聊一聊数组,只讨论最基础的

关于:一维零基数组

定义:
[1]零基,zero-based, 最小索引为0
[2]一维,相对于(多维,交错)
[3]效率,编译器又开后门了
[A]提供了IL操作指令newarr
[B]访问数组时不需要通过索引减去偏移量来完成,
[C]而且JIT也只需执行一次范围检查
实例化时必须指定数组的大小,
实例后不能改变数据的大小

[4]缺点
实例化时必须指定数组的大小
实例化后也不能改变数组结构
(不能添加,插入,删除结点,但可以改变结点的内容)

集合的基础之一,集合的三种基础结构:
[1]基于数组
[2]基于链表
[3]基于位



作者: faunus    时间: 2014-2-23 10:32
本帖最后由 faunus 于 2014-2-23 10:38 编辑

创建方式:(茴字有几个写法)
[1]显式创建

  1. //显式创建
  2. Array myArray = Array.CreateInstance(typeof(string), 3);
  3. myArray.SetValue("a", 0);
  4. myArray.SetValue("b", 1);
  5. myArray.SetValue("c", 2);
  6. //无法直接赋值,导至出错
  7. //myArray[0] = 99;//无法将带[]的索引应用于“System.Array”类型的表达式
  8. //必须经过显式的转换
  9. int[] myArrayConvert = (int[])myArray;
  10. myArrayConvert[0] = 99;
复制代码







作者: faunus    时间: 2014-2-23 10:33
本帖最后由 faunus 于 2014-2-23 10:38 编辑

[2]常规创建

  1. int[] myArray = new int[3];
  2. myArray[0] = 0;
  3. myArray[1] = 1;
  4. myArray[2] = 2;
复制代码









作者: faunus    时间: 2014-2-23 10:33
本帖最后由 faunus 于 2014-2-23 10:38 编辑

[3]隐式创建

  1. //正确书写方法
  2. int[] myArray0 = { 0, 1, 2 };
  3. int[] myArray1 = { 0, 1, 2, };
  4. int[] myArray2 = new []{ 0, 1, 2 };
  5. int[] myArray3 = new int[] { 0, 1, 2 };
  6. int[] myArray4 = new int[3] { 0, 1, 2 };
  7. //错误书写方法
  8. //int[] myArrayErr = { 0, 1, "a" };//无法将类型“string”隐式转换为“int”
  9. //int[] myArrayErr = new[] { 0, 1, "a" };//找不到隐式类型数组的最佳类型
  10. //int[] myArrayErr = new[3] { 0, 1, 2 };//语法错误,应输入“]”
  11. //int[] myArrayErr = new int[4] { 0, 1, 2 };//无效的秩说明符: 应为“,”或“]”
复制代码





作者: faunus    时间: 2014-2-23 10:33
本帖最后由 faunus 于 2014-2-23 10:39 编辑

[4]匿名创建

  1. //正确书写方法
  2. var myArray1 = new[] { 0, 1, 2 };
  3. var myArray2 = new int[] { 0, 1, 2 };
  4. var myArray3 = new int[3] { 0, 1, 2 };
  5. //错误书写方法
  6. //var myArrayErr = { 0, 1, 2 };//无法用数组初始值设定项初始化隐式类型的局部变量
复制代码






作者: faunus    时间: 2014-2-23 10:34
本帖最后由 faunus 于 2014-2-23 10:40 编辑

[5]其它


  1. int i = 1;
  2. char c = 'a';
  3. string s = "s";
  4. //正确书写方法
  5. int[] myArray0 = { 0, i, 2 };
  6. int[] myArray1 = { 0, c, 2 };//隐式转换
  7. //错误书写方法
  8. //int[] myArrayErr = { 0, s, 2 };//无法将类型“string”隐式转换为“int”
复制代码




作者: faunus    时间: 2014-2-23 10:40
说明:
在隐式的匿名的创建方式中,
数据的赋值实际上是调用了IList接口上的.Add()方法,
了解数组类,最好的的办法是:自己实现一个数组类试试^_^


  1. //提供创建、操作、搜索和排序数组的方法,因而在公共语言运行库中用作所有数组的基类。
  2. [Serializable]
  3. [ComVisible(true)]
  4. public abstract class Array : ICloneable, IList, ICollection, IEnumerable { }
复制代码








欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3