无论哪种语言,肯定会有集合的概念。而最简单,最直观的集合应该就是数组了,数组是在内存中连续的一段空间。看看C#中数组
的定义。
1、int[] intArry ;
intArry= new int[6];
这里声明了一个int数组类型变量intArry,并保存一个具有6个单元的int数组对象;
int[,] intArry2 = new int[3, 4];
声明一个int二维数组类型变量,并初始化一个3行4列的数组对象;
int[][] intArry3 = new int[9][];
声明一个数组单元为int数组类型的数组变量,每个数组元素是一个int数组类型的对象引用。
因为是面向对象语言,上面提到了引用和对象。其实:
1、.net Frameword数组不是一种单纯的数据结构,而是一个类型,叫数组类型;
2、.net Framework中的数组变量保存着引用到数组类型对象的引用,也就是说数组是一个对象。
所有.net Framework数组(int[],string[],object[])都是从Array继承的子类。一般不直接使用Array类,因为.net Framework下
的各类语言,当然也包括C#,将数组对象映射为各自的特殊语法了,比如int[],string[]。
数组主要有两个各属性:索引和长度,也就是index和length,索引用于访问数组对象中的元素,长度也就是数组的长度。
看一段联系代码:
public class MyArray
{
/// <summary>
/// 定义数组测试
/// </summary>
public void TestInt()
{
int[] intArry1 = null;
intArry1 = new int[6];
int[,] intArry2 = new int[3, 4];
int[][] intArry3 = new int[9][];
}
/// <summary>
/// 值类型数组转引用类型数组测试
/// </summary>
/// <param name="array"></param>
/// <returns></returns>
public static object[] Int32ToArrayOfObject(int[] array)
{
object[] objArray = new object[array.Length];
for (int i = 0; i < array.Length; i++)
{
objArray[i] = array[i];
}
return objArray;
}
/// <summary>
/// 数组的主要特性测试
/// </summary>
public static void MainTest()
{
//声明一个包含是个元素的字符串型数组
string[] sArray = new string[10];
//访问数组
//赋值
for (int i = 0; i < sArray.Length; i++)
{
sArray[i] = @"string" + i;
}
ConsoleToClientString(sArray);
//另一种方式声明数组,所谓的枚举法
sArray = new string[] { "TestString0", "TestString1", "TestString2" };
ConsoleToClientString(sArray);
//数组复制
string[] newSArray = sArray.Clone() as string[];
ConsoleToClientString(newSArray);
//使用Array的CreateInstance方法声明10元素的整形数组
int[] intArray = Array.CreateInstance(typeof(int), 10) as int[];
for (int i = 0; i < intArray.Length; i++)
{
intArray[i] = i;
}
ConsoleToClientInt(intArray);
//数组之间的复制,指定位置,指定长度
int[] newIntArray = new int[20];
Array.Copy(intArray, 3, newIntArray, 4, intArray.Length - 3);
ConsoleToClientInt(newIntArray);
object[] objArray = sArray;
ConsoleToClientObject(objArray);
objArray = Int32ToArrayOfObject(intArray);
ConsoleToClientObject(objArray);
//数组的数组
int[][] intArrayArray = new int[9][];
Console.WriteLine("数组长度:" + intArrayArray.Length);
//赋值
for (int i = 1; i < 10; i++)
{
intArrayArray[i - 1] = new int[i];
for (int j = 1; j <= i; j++)
{
intArrayArray[i - 1][j - 1] = i * j;
}
}
ConsoleToClientArrayArrayInt(intArrayArray);
//二维数组
int[,] intArray2D = new int[9, 9];
Console.WriteLine(string.Format("二维数组 长度:{0},维数:{1}*{2}", intArray2D.Length,
intArray2D.GetLength(0), intArray2D.GetLength(1)));
for (int i = 1; i < 10; i++)
{
for (int j = 1; j <= i; j++)
{
intArray2D[i - 1, j - 1] = i * j;
}
}
int count = 0;
foreach (int item in intArray2D)
{
if (item > 0)
{
Console.Write("{0,2}", item);
}
if (++count >= 9)
{
Console.WriteLine();
count = 0;
}
}
}
static void ConsoleToClientArrayArrayInt(int[][] intArrayArray)
{
foreach (int[] item1 in intArrayArray)
{
foreach (int item2 in item1)
{
Console.Write("{0,2}", item2);
}
Console.WriteLine();
}
Console.WriteLine();
}
static void ConsoleToClientString(string[] sArray)
{
foreach (string item in sArray)
{
Console.Write(item + @",");
}
Console.WriteLine();
}
static void ConsoleToClientInt(int[] intArray)
{
foreach (int item in intArray)
{
Console.Write(item + @",");
}
Console.WriteLine();
}
static void ConsoleToClientObject(object[] objArray)
{
foreach (object item in objArray)
{
Console.Write(item.ToString() + @",");
}
Console.WriteLine();
}
}
调用
class Program
{
static void Main(string[] args)
{
MyArray.MainTest();
Console.ReadLine();
}
}
结果
由上可以知道:
数组有引用类型数组和值类型数组,对于引用类型数组,元素用于保存对象的引用,初始化值为null;对于值类型数组,元素保存
对象的值,对于数字类型初始化值为0。
数组有维度,但是多维数组和数组的数组是不同的概念,intArrayArray和intArray2D是不同的。数组的数组表示一个m*n的行列式
,多维数组则是每个元素都是一个数组对象的数组。
数组和其他集合类一样都是是实现了ICollection接口,都具有枚举和迭代功能。
代码下载:http://download.csdn.net/detail/yysyangyangyangshan/4640445