数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。
§6.1 一维数组
【数组声明】
格式:
数据类型[ ] 数组名;
eg:
int[] int_array;
【数组索引/下标】
数组索引默认从0开始, 依次递增1,最大到[数组长度-1]。
【数组初始化】
数组是一个引用类型,声明一个数组不会在内存中初始化数组。当初始化数组变量时,需要使用 new 关键字来创建数组的实例,然后再进行初始化操作。
eg:
1、先声明后初始化(使用下标运算符[]进行初始化)
double[] balance = new double[5];
balance[0] = 4500.0;//索引初始化
balance[1] = 5000.0;//索引初始化
balance[2] = 6000.0;//索引初始化
balance[3] = 7000.0;//索引初始化
balance[4] = 8000.0;//索引初始化
2、声明的同时进行初始化(使用初始化表达式{}进行初始化)
float[] float_array = {1.1, 2.2, 3.3, 4.4, 5.5
或
int [] marks = new int[5] { 99, 98, 92, 97, 95};
或
省略数组的大小
int [] marks = new int[] { 99, 98, 92, 97, 95};
或
赋值一个数组变量到另一个目标数组变量中。在这种情况下,目标和源会指向相同的内存位置。
int [] marks = new int[] { 99, 98, 92, 97, 95};
int[] score = marks;
注意:
当创建一个数组时,C# 编译器会根据数组类型隐式初始化每个数组元素为对应数据类型的默认值。例如,int 数组的所有元素都会被初始化为 0。
【数组访问】
1、单一访问(索引访问)
double salary = balance[9];
2、批量访问
// #region << 版 本 注 释 >>
// /*----------------------------------------------------------------
// // Copyright (C) 2019 极客部落
// // 版权所有。
// //
// // 文件名:Program.cs
// // 文件功能描述:
// //
// //
// // 创建者:GeekTribe
// // 时间:14:05
// //----------------------------------------------------------------*/
// #endregion
using System;
namespace MSN
{
class MainClass
{
public static void Main(string[] args)
{
int[] balance = new int[10]; /* n 是一个带有 10 个整数的数组 */
int i, j;
/* 初始化数组 n 中的元素 */
for (i = 0; i < 10; i++)
{
balance[i] = i + 100;
}
/*For 批量化遍历*/
for (j = 0; j < 10; j++)
{
Console.WriteLine("balance[{0}] = {1}", j, balance[j]);
}
/*Foreach 批量化遍历*/
foreach (int ele in balance)
{
int index = ele - 100;
Console.WriteLine("balance[{0}] = {1}", index, ele);
}
}
}
}
§6.2 二维数组
二维数组是一组具有相同数据类型且可重复的变量的集合。二维数组可看作是一维数组的嵌套:一维数组中的每一个元素都是一个数组。
【数组声明】
格式:
数据类型[ , ] 数组名 ;
eg:
int[,] int_array;
【数组初始化】
多维数组可以通过在括号内为每行指定值来进行初始化。下面是一个带有 3 行 4 列的数组。
int [,] a = new int [3,4] {
{0, 1, 2, 3} , /* 初始化索引号为 0 的行 */
{4, 5, 6, 7} , /* 初始化索引号为 1 的行 */
{8, 9, 10, 11} /* 初始化索引号为 2 的行 */
};
【数组访问】
1、单一访问(索引访问)
二维数组中的元素可以通过使用下标(即数组的行索引和列索引)进行访问。
int val = a[2,3];
2、批量访问
// #region << 版 本 注 释 >>
// /*----------------------------------------------------------------
// // Copyright (C) 2019 极客部落
// // 版权所有。
// //
// // 文件名:Program.cs
// // 文件功能描述:
// //
// //
// // 创建者:GeekTribe
// // 时间:14:05
// //----------------------------------------------------------------*/
// #endregion
using System;
namespace MSN
{
class MainClass
{
public static void Main(string[] args)
{
/* 5 行 2 列的数组 */
int[,] int_array = { { 0, 0 }, { 1, 2 }, { 2, 4 }, { 3, 6 }, { 4, 8 } };
int i, j;
/* 输出数组中每个元素的值 */
for (i = 0; i < 5; i++)
{
for (j = 0; j < 2; j++)
{
Console.WriteLine("int_array[{0},{1}] = {2}", i, j, int_array[i, j]);
}
}
}
}
}
§6.3 ArrayList
动态数组(ArrayList)代表了可被单独索引的对象的有序集合。它基本上可以替代一个数组。但是,与数组不同的是,您可以使用索引在指定的位置添加和移除项目,动态数组会自动重新调整它的大小。它也允许在列表中进行动态内存分配、增加、搜索、排序等操作。
下表列出了 ArrayList 类的一些常用的 属性:
下表列出了 ArrayList 类的一些常用的 方法:
eg:
// #region << 版 本 注 释 >>
// /*----------------------------------------------------------------
// // Copyright (C) 2019 极客部落
// // 版权所有。
// //
// // 文件名:Program.cs
// // 文件功能描述:
// //
// //
// // 创建者:GeekTribe
// // 时间:14:05
// //----------------------------------------------------------------*/
// #endregion
using System;
using System.Collections;
namespace MSN
{
class MainClass
{
public static void Main(string[] args)
{
ArrayList al = new ArrayList();
Console.WriteLine("Adding some numbers:");
al.Add(45);
al.Add(78);
al.Add(33);
al.Add(56);
al.Add(12);
al.Add(23);
al.Add(9);
Console.WriteLine("Capacity: {0} ", al.Capacity);
Console.WriteLine("Count: {0}", al.Count);
Console.Write("Content: ");
foreach (int i in al)
{
Console.Write(i + " ");
}
Console.WriteLine();
Console.Write("Sorted Content: ");
al.Sort();
foreach (int i in al)
{
Console.Write(i + " ");
}
Console.WriteLine();
}
}
}
§6.4 Hashtable
C# 类实现了 IDictionary 接口,集合中的值都是以键值对的形式存取的。
换句话说,在 Hashtable 中存放了两个数组,一个数组用于存放 key 值,一个数组用于存放 value 值。
Hashtable 类提供的构造方法有很多,最常用的是不含参数的构造方法,即通过如下代码来实例化 Hashtable 类。Hashtable 类中常用的属性和方法如下表所示。
下表列出了 Hashtable 类的一些常用的 属性:
下表列出了 Hashtable 类的一些常用的 方法: