数组和集合类是编程中非常基础且重要的数据结构。在 C# 中,数组和集合类提供了丰富的功能,用于存储和操作数据。本文将详细介绍 C# 中数组和集合类的基本操作,并探讨一些常见的问题及其解决方法。
数组是一种基本的数据结构,用于存储相同类型的元素。数组中的每个元素都有一个索引,索引从 0 开始。
// 创建整型数组
int[] numbers = new int[5]; // 定长数组
// 初始化数组
int[] numbers = new int[] { 1, 2, 3, 4, 5 };
numbers[0] = 10; // 修改第一个元素
int first = numbers[0]; // 获取第一个元素
for (int i = 0; i < numbers.Length; i++) {
Console.WriteLine(numbers[i]);
}
foreach (int num in numbers) {
Console.WriteLine(num);
}
访问数组时,索引超出范围会导致 IndexOutOfRangeException
。
假设我们需要访问数组的最后一个元素,但索引越界:
using System;
class Program
{
static void Main()
{
int[] numbers = new int[] { 1, 2, 3, 4, 5 };
try {
Console.WriteLine(numbers[5]); // 索引越界
} catch (IndexOutOfRangeException ex) {
Console.WriteLine("索引越界: " + ex.Message);
}
}
}
修正后的代码如下:
using System;
class Program
{
static void Main()
{
int[] numbers = new int[] { 1, 2, 3, 4, 5 };
if (numbers.Length > 5) {
Console.WriteLine(numbers[5]);
} else {
Console.WriteLine("索引越界");
}
}
}
数组一旦创建,其长度就不可改变。
List<T>
)来实现动态扩展。假设我们需要在数组末尾添加一个新元素:
using System;
class Program
{
static void Main()
{
int[] numbers = new int[] { 1, 2, 3, 4, 5 };
int[] newNumbers = new int[numbers.Length + 1];
Array.Copy(numbers, newNumbers, numbers.Length);
newNumbers[newNumbers.Length - 1] = 6;
foreach (int num in newNumbers) {
Console.WriteLine(num);
}
}
}
集合类提供了更灵活的数据存储方式,其中最常用的是 List<T>
类。
List<int> numbers = new List<int>(); // 动态扩展列表
numbers.Add(1); // 添加单个元素
numbers.AddRange(new int[] { 2, 3, 4 }); // 添加多个元素
numbers[0] = 10; // 修改第一个元素
int first = numbers[0]; // 获取第一个元素
for (int i = 0; i < numbers.Count; i++) {
Console.WriteLine(numbers[i]);
}
foreach (int num in numbers) {
Console.WriteLine(num);
}
numbers.Remove(1); // 移除指定元素
numbers.RemoveAt(0); // 移除指定索引处的元素
bool contains = numbers.Contains(1); // 是否包含指定元素
int index = numbers.IndexOf(1); // 获取指定元素的索引
访问集合时,索引超出范围会导致 ArgumentOutOfRangeException
。
假设我们需要访问集合的最后一个元素,但索引越界:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
try {
Console.WriteLine(numbers[5]); // 索引越界
} catch (ArgumentOutOfRangeException ex) {
Console.WriteLine("索引越界: " + ex.Message);
}
}
}
修正后的代码如下:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
if (numbers.Count > 5) {
Console.WriteLine(numbers[5]);
} else {
Console.WriteLine("索引越界");
}
}
}
当集合中的元素数量超过初始容量时,可能会导致性能下降。
TrimExcess
方法:优化集合的容量。假设我们需要创建一个集合并添加大量元素:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> numbers = new List<int>(1000); // 预设容量为 1000
for (int i = 1; i <= 1000; i++) {
numbers.Add(i);
}
Console.WriteLine("集合容量: " + numbers.Capacity);
numbers.TrimExcess(); // 优化集合容量
Console.WriteLine("优化后的集合容量: " + numbers.Capacity);
}
}
假设我们需要实现一个简单的计算器,计算数组和列表的总和。
using System;
class Program
{
static int SumArray(int[] arr)
{
int sum = 0;
foreach (int num in arr) {
sum += num;
}
return sum;
}
static void Main()
{
int[] numbers = new int[] { 1, 2, 3, 4, 5 };
int sum = SumArray(numbers);
Console.WriteLine("数组总和: " + sum);
}
}
using System;
using System.Collections.Generic;
class Program
{
static int SumList(List<int> list)
{
int sum = 0;
foreach (int num in list) {
sum += num;
}
return sum;
}
static void Main()
{
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
int sum = SumList(numbers);
Console.WriteLine("集合总和: " + sum);
}
}
通过本文的介绍,你已经掌握了 C# 中数组和集合类的基本操作,并了解了一些常见的问题及其解决方法。正确地使用数组和集合类可以使程序逻辑更加清晰和高效。在实际编程中,要注意以下几点:
List<T>
可以动态扩展,适合存储不确定数量的元素。继续深入学习 C# 的其他知识点,你将能够更加熟练地使用这门语言进行开发。