前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C# 一分钟浅谈:数组与集合类的基本操作

C# 一分钟浅谈:数组与集合类的基本操作

作者头像
Jimaks
发布2024-09-25 07:59:27
710
发布2024-09-25 07:59:27
举报
文章被收录于专栏:大数据

引言

数组和集合类是编程中非常基础且重要的数据结构。在 C# 中,数组和集合类提供了丰富的功能,用于存储和操作数据。本文将详细介绍 C# 中数组和集合类的基本操作,并探讨一些常见的问题及其解决方法。

image.png
image.png

数组

数组是一种基本的数据结构,用于存储相同类型的元素。数组中的每个元素都有一个索引,索引从 0 开始。

创建数组

代码语言:javascript
复制
// 创建整型数组
int[] numbers = new int[5];  // 定长数组

// 初始化数组
int[] numbers = new int[] { 1, 2, 3, 4, 5 };

常见操作

访问元素
代码语言:javascript
复制
numbers[0] = 10;  // 修改第一个元素
int first = numbers[0];  // 获取第一个元素
遍历数组
代码语言:javascript
复制
for (int i = 0; i < numbers.Length; i++) {
    Console.WriteLine(numbers[i]);
}

foreach (int num in numbers) {
    Console.WriteLine(num);
}

常见问题及解决方法

问题 1: 索引越界

访问数组时,索引超出范围会导致 IndexOutOfRangeException

解决方法
  1. 检查索引范围:确保索引在有效范围内。
  2. 使用条件语句:使用条件语句来避免越界访问。
示例代码

假设我们需要访问数组的最后一个元素,但索引越界:

代码语言:javascript
复制
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);
        }
    }
}

修正后的代码如下:

代码语言:javascript
复制
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("索引越界");
        }
    }
}
问题 2: 数组长度不可变

数组一旦创建,其长度就不可改变。

解决方法
  1. 使用集合类:使用集合类(如 List<T>)来实现动态扩展。
  2. 重新分配内存:手动重新分配数组内存并复制数据。
示例代码

假设我们需要在数组末尾添加一个新元素:

代码语言:javascript
复制
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> 类。

创建集合

代码语言:javascript
复制
List<int> numbers = new List<int>();  // 动态扩展列表

常见操作

添加元素
代码语言:javascript
复制
numbers.Add(1);  // 添加单个元素
numbers.AddRange(new int[] { 2, 3, 4 });  // 添加多个元素
访问元素
代码语言:javascript
复制
numbers[0] = 10;  // 修改第一个元素
int first = numbers[0];  // 获取第一个元素
遍历集合
代码语言:javascript
复制
for (int i = 0; i < numbers.Count; i++) {
    Console.WriteLine(numbers[i]);
}

foreach (int num in numbers) {
    Console.WriteLine(num);
}
删除元素
代码语言:javascript
复制
numbers.Remove(1);  // 移除指定元素
numbers.RemoveAt(0);  // 移除指定索引处的元素
查找元素
代码语言:javascript
复制
bool contains = numbers.Contains(1);  // 是否包含指定元素
int index = numbers.IndexOf(1);  // 获取指定元素的索引

常见问题及解决方法

问题 1: 索引越界

访问集合时,索引超出范围会导致 ArgumentOutOfRangeException

解决方法
  1. 检查索引范围:确保索引在有效范围内。
  2. 使用条件语句:使用条件语句来避免越界访问。
示例代码

假设我们需要访问集合的最后一个元素,但索引越界:

代码语言:javascript
复制
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);
        }
    }
}

修正后的代码如下:

代码语言:javascript
复制
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("索引越界");
        }
    }
}
问题 2: 集合容量不足

当集合中的元素数量超过初始容量时,可能会导致性能下降。

解决方法
  1. 预设集合容量:在创建集合时预设容量。
  2. 使用集合类的 TrimExcess 方法:优化集合的容量。
示例代码

假设我们需要创建一个集合并添加大量元素:

代码语言:javascript
复制
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);
    }
}

示例代码:综合应用

假设我们需要实现一个简单的计算器,计算数组和列表的总和。

数组
代码语言:javascript
复制
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);
    }
}
集合
代码语言:javascript
复制
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# 的其他知识点,你将能够更加熟练地使用这门语言进行开发。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-09-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • 数组
    • 创建数组
      • 常见操作
        • 访问元素
        • 遍历数组
      • 常见问题及解决方法
        • 问题 1: 索引越界
        • 示例代码
        • 问题 2: 数组长度不可变
        • 示例代码
    • 集合类
      • 创建集合
        • 常见操作
          • 添加元素
          • 访问元素
          • 遍历集合
          • 删除元素
          • 查找元素
        • 常见问题及解决方法
          • 问题 1: 索引越界
          • 示例代码
          • 问题 2: 集合容量不足
          • 示例代码
        • 示例代码:综合应用
          • 数组
          • 集合
      • 总结
      相关产品与服务
      数据保险箱
      数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档