首页 > 编程笔记 > C#笔记 阅读:11

C# ArrayList动态数组类的用法(非常详细,附带实例)

C# 中的 ArrayList 在 System.Colletions 命名空间下,可以想成是 Array 的升级类,此类的特色如下:

C# ArrayList对象的创建

C# 创建 ArrayList 对象有 3 种方法。

1) 使用 new 关键词创建 ArrayList 对象,例如,创建 arrList 对象的语法如下:
ArrayList arrList = new ArrayList();
上述创建 ArrayList 对象 arrList,暂时没有元素,未来可以增加元素。

2) 将一个指定集合内容复制到此 ArrayList 对象内,基础语法概念如下:
ArrayList arrList = new ArrayList(ICollection);
注意,ICollection 代表已经定义的集合,这类集合内容是可以编辑更改的。在这里可以将此类的集合当作 ArrayList 的参数,可以参考下列实例:
int[ ] arr = {1, 2, 3};
ArrayList arrList = new ArrayList(arr);
上述创建了 ArrayList 对象 arrList,此对象内容是 {1, 2, 3}。

3) 创建 ArrayList 对象时,同时指定元素的个数,下列设定元素个数是 n。
ArrayList arrList = new ArrayList(n);

C#初始化ArrayList对象

创建 ArrayList 对象时,我们可以在对象末端增加大括号,然后直接设置 ArrayList 对象的内容。

例如,设置 James 的 3 场得分,然后输出结果。
using System.Collections;

ArrayList arrList = new ArrayList {"James", 36, 28, 31};
for (int i = 0; i < arrList.Count; i++)
    Console.Write($"{arrList[i]}\t");
执行结果为:

James 36 28 31


上述程序第 3 行和第 4 行也可以改写:
using System.Collections;

ArrayList arrList = new() {"James", 36, 28, 31};
for (int i = 0; i < arrList.Count; i++)
    Console.Write($"{arrList[i]}\t");
当创建 ArrayList 对象后,此对象元素的数据类型是 object,例如,元素 "James" 或元素 36 都是 object,即使 36、28 和 31 从直觉来看是整数事实上也都是 object,如果要进行元素内容的算术运算,则需要使用 Convert.ToInt32(),将 object 转换成 int。

【实例】计算 James 前 3 场的总得分。
using System.Collections;

ArrayList arrList = new ArrayList
{
    "James", 36, 28, 31
};
int total = 0;
for (int i = 1; i < arrList.Count; i++)
    total += Convert.ToInt32(arrList[i]);
Console.Write($"[{arrList[0]} 前 {arrList.Count - 1} 场得分:{total}]");
执行结果为:

James 前 3 场得分:95

C#遍历ArrayList对象

使用 for 关键字遍历对象,如下所示:
foreach (var x in arrList)
    ...
因为 ArrayList 对象的元素数据类型是 object,在设定 x 的数据类型时可使用 var 或 object。

我们也可以使用 foreach 关键词遍历对象,如下所示:
using System.Collections;

ArrayList arrList = new ArrayList
{
    "James", 36, 28, 31
};
foreach (var x in arrList)
    Console.Write($"{x}\t");
执行结果为:

James 36 28 31


另外,因为 ArrayList 类默认对象元素是 object 对象,所以也可以将 var|object 替换:
using System.Collections;

ArrayList arrList = new ArrayList
{
    "James", 36, 28, 31
};
foreach (object x in arrList)
    Console.Write($"{x}\t");

C# ArrayList的常用属性和方法

ArrayList 的常用属性如下表所示:

表:ArrayList 类的常用属性
属 性 描 述
Capacity 设定或取得 ArrayList 对象的元素个数的容量。
Count 获得 ArrayList 对象的元素个数。
IsFixedSize 如果是 true 表示有固定大小,否则是 false。
IsReadOnly 如果是 true 表示是只读,否则是 false。
Item[ ] 由索引获得指定元素。

ArrayList 的常用方法如下表所示:

表:ArrayList 类的常用方法
方法 说明
Add() 在对象末端增加元素。
AddRange() 在对象末端增加对象。
Insert() 在对象指定索引位置插入元素。
Contains() 回传元素是否存在。
Clear() 清除所有元素。
Remove() 删除第一个相符的元素。
RemoveAt() 删除指定索引的元素。
RemoveRange() 删除指定范围的元素。
IndexOf() 回传元素第一次出现索引的位置。
LastIndexOf() 回传最后出现字符串的索引位置。
Sort() 元素排序。
Reverse() 元素反转排列。

1) Add()和AddRange()增加元素

Add() 可以在 ArrayList 对象末端增加元素内容。例如:
using System.Collections;

ArrayList arrList = new ArrayList
{
    "James", 36, 28, 31
};
arrList.Add(33);
arrList.Add(26);
foreach (var x in arrList)
    Console.Write($"{x}\t");
执行结果为:

James 36 28 31 33 26


AddRange() 可以在 ArrayList 对象元素末端增加也是 ArrayList 对象的内容:
using System.Collections;

ArrayList arrList = new ArrayList
{
    "James", 36, 28, 31
};
ArrayList scList = new ArrayList
{
    33, 26
};
arrList.AddRange(scList);
foreach (var x in arrList)
    Console.Write($"{x}\t");
执行结果为:

James 36 28 31 33 26

2) Insert()插入元素

插入元素 Insert() 方法的基础语法如下:
Insert(int index, Object object);
上述是在 index 索引位置插入 object 对象。

例如:
using System.Collections;

ArrayList xList = new ArrayList();
for (int i = 0; i < 10; i++) // 创建 xList
    xList.Add(i);
Console.WriteLine("输出所创建的 xList");
foreach (int i in xList)
    Console.Write(i + " ");
xList.Insert(5, 15); // 在索引5插入15
Console.WriteLine();
Console.WriteLine("输出插入对象后的 xList");
foreach (var x in xList)
    Console.Write(x + " ");
执行结果为:

输出所创建的 xList
0 1 2 3 4 5 6 7 8 9
输出插入对象后的 xList
0 1 2 3 4 15 5 6 7 8 9

3) Contains()是否包含特定元素

Contains() 方法可以回传是否包含特定元素的判断结果,假设对象是 arrList,语法如下:
bool rtn = arrList.Contains(item); // item是搜寻元素
如果 arrList 有此 item 则回传 true,如果没有此 item 则回传 false。

例如,输入一种水果,如果水果已经存在则输出“这个水果已经有了”,如果水果不存在则将此水果加入水果清单,然后输出新的水果清单。
using System.Collections;

ArrayList fruits = new() { "Apple", "Banana", "Watermelon" };
Console.Write("请输入水果:");
string fruit = Console.ReadLine();
if (fruits.Contains(fruit))
    Console.WriteLine("这个水果已经有了");
else
{
    fruits.Add(fruit);
    Console.WriteLine("谢谢提醒,已经加入水果列表,新水果列表如下:");
    foreach (var fru in fruits)
        Console.Write(fru + " ");
}
执行结果为:

请输入水果:Banana
这个水果已经有了
Microsoft Visual Studio 调试控制台
请输入水果:Orange
谢谢提醒,已经加入水果列表,新水果列表如下:Apple, Banana, Watermelon, Orange,

4) ArrayList删除元素

Clear() 可以清除所有元素。假设对象是 arrList,那么可以用 arrList.Clear(),其执行后此对象依旧存在,只是不再有元素,未来如果有需要可以再用 Add() 方法增加元素。

Remove() 可以删除第一个与目标相符的元素,假设对象是 arrList,其语法如下:
arrList.Remove(item); // item是要删除的元素

【实例】ArrayList 对象有两个 BMW 字符串,只删除第 1 次出现的 BMW 字符串。
using System.Collections;

ArrayList cars = new() { "Benz", "BMW", "Nissan", "BMW" };
cars.Remove("BMW");
Console.WriteLine("新的汽车列表如下:");
foreach (var car in cars)
    Console.Write(car + " ");
执行结果为:

新的汽车列表如下:
Benz, Nissan, BMW,


RemoveAt() 可以删除指定索引的元素,假设对象是 arrList,其语法如下:
arrList.RemoveAt(index); // index是要删除的元素索引

例如,删除索引 5 的元素:
using System.Collections;

ArrayList xList = new ArrayList();
for (int i = 0; i < 10; i++) // 创建 xList
    xList.Add(i);
Console.WriteLine("输出所创建的 xList");
foreach (int i in xList)
    Console.Write(i + " ");
xList.RemoveAt(5); // 删除索引5元素
Console.WriteLine();
Console.WriteLine("输出删除索引5后的 xList");
foreach (var x in xList)
    Console.Write(x + " ");
执行结果为:

输出所创建的 xList
0 1 2 3 4 5 6 7 8 9
输出删除索引5后的 xList
0 1 2 3 4 6 7 8 9


RemoveRange() 可以删除指定范围的元素,假设对象是 arrList,其语法如下:
arrList.RemoveRange(index, length);
index 是要删除元素的起始索引,length 是删除的元素个数,此外,如果删除元素数量超出范围,系统会产生错误。

例如,删除从索引 5 开始,元素长度为 3 的实例。
using System.Collections;

ArrayList xList = new ArrayList();
for (int i = 0; i < 10; i++) // 建立 xList
    xList.Add(i);
Console.WriteLine("输出所创建的 xList");
foreach (int i in xList)
    Console.Write(i + " ");
xList.RemoveRange(5, 3); // 删除索引5元素,长度是3
Console.WriteLine();
Console.WriteLine("输出删除索引5,长度是3的 xList");
foreach (var x in xList)
    Console.Write(x + " ");
执行结果为:

输出所创建的 xList
0 1 2 3 4 5 6 7 8 9
输出删除索引5,长度是3的 xList
0 1 2 3 4 8 9

5) ArrayList回传元素出现的位置

IndexOf() 和 LastIndexOf() 的语法如下:
int idx = arrList.IndexOf(item); // 回传元素第一次出现的索引
int idx = arrList.LastIndexOf(item); // 回传元素最后一次出现的索引
如果找不到此元素则回传 -1。

例如:
using System.Collections;

ArrayList cars = new() { "Benz", "BMW", "Nissan", "BMW", "Lexus" };
int idx = cars.IndexOf("BMW");
Console.WriteLine($"第 1 次出现 BMW 的索引是:{idx}");
int idxx = cars.LastIndexOf("BMW");
Console.WriteLine($"最后 1 次出现 BMW 的索引是:{idxx}");
执行结果为:

第 1 次出现 BMW 的索引是:1
最后 1 次出现 BMW 的索引是:3

6) ArrayList元素重新排列

Sort() 和 Reverse() 的语法如下:
arrList.Sort(); // 从小到大排序
arrList.Reverse(); // 反转排列
例如,将一组数字从小到大排序,然后反转排列可以产生从大到小排序:
using System.Collections;

ArrayList numbers = new() { 10, 8, 11, 3, 9 };
numbers.Sort();
Console.Write("从小到大排:");
foreach (object num in numbers)
    Console.Write(num + " ");
Console.WriteLine();
numbers.Reverse();
Console.Write("从大到小排:");
foreach (object num in numbers)
    Console.Write(num + " ");
执行结果为:

从小到大排:3 8 9 10 11
从大到小排:11 10 9 8 3

相关文章