在C#中,Array,List,ArrayList,Dictionary,Hashtable,SortList,Stack的区别

news2025/2/8 4:34:41

Array

Array你可以理解为是所有数组的大哥

普通数组   :   特点是长度固定, 只能存储相同类型的数据
    static void Main(string[] args)
    {
        //声明
        int[] ints;
        string[] strings;
        People[] peoples;

        //默认值 
        //int 类型是 0
        //string 类型是 null
        int[] ints1 = { 1, 2, 3 };
        string[] strings1 = { "张三", "李四", "王五" };

        //数组里面如果存 值类型 存储就是值本身
        //数组里面如果存 引用类型 存储的就是内存地址

        //数组遍历
        for (int i = 0; i < ints1.Length; i++)
        {
            Console.WriteLine(ints1[i]);
        }
        foreach (var s in strings1)
        {
            Console.WriteLine(s);
        }
        int[] ages = { 18, 19, 2, 30, 60, 15, 14 };
        //Array类上的方法
        //1.Clear() 将数组恢复成默认值 参1:索引  参2:长度
        Array.Clear(ints1,1,1);
        //2.Copy()  复制
        //Array.Copy(ints1, strings1, ints1.Length);
        //3.Reverse() 反转
        Array.Reverse(ints1);
        //4.IndexOf() 从前往后查询参数2在参数1中首次出现的位置,有则返回索引 没有返回-1
        //参1:数组  参2:该数在参1出现的位置  参3:指定开始查询位置  参4:查询的个数
        Array.IndexOf(ages,30);
        //5.LastIndexOF() 从后向前查找参2数据,出现在参1数组中,有则返回索引,没有返回-1
        Array.LastIndexOf(ages,30);

        //6.Find() 从前往后查询参数2在参数1中首次出现的位置 ,有则返回值 没有返回数据默认值
        Array.Find(ages, x => x > 18);
        //7.FindLast() 从后往前查询参数2条件的值 有则返回查到的值 没有返回数据类型默认值
        Array.FindLast(ages, x => x <18);
        //8.FindIndex() 从前往后查询参数2条件的值 有则返回查到的值的索引 没有返回-1
        Array.FindIndex(ages, x => x ==18);
        //9.FindLastIndex() 从后向前查询参数2条件的值 返回的是一个数组
        Array.FindLastIndex(ages, x => x ==18);
        //10.FindAll() 查找数组中所有符合参数2条件的值 返回的是一个数组
        Array.FindAll(ages, x => x % 2 == 0);

        //11.TrueForAll() 判断数组中的数据是否全部满足参数2,如果满足返回true 只要有一个不满足 则返回false
        Array.TrueForAll(ages, x => x>0);
        //12.Exists()  判断数组中是否有一项满足参数2的条件,只要有一项满足条件 则返回true 所有不满足则返回false
        Array.Exists(ages,x=>x%2==0);

        //实例上的方法:
        //1.CopyTo()
        //2.GetLength()  获取指定维度长度
        //3.SetValue()   设置值
        //4.GetValue()   获取值
       
    }
}
class People
{
    public string Name { get; set; }
}

List

//List: 集合  只能存储相同类型的数据,List的长度是不固定的
//格式: List<数据类型> 变量名 = new List<数据类型>();

List<string>list=new List<string>() { "1","2","3"};
List<int> list2=new List<int>(){1,2,3};
list[0] = "1111";
Console.WriteLine(list[0]);
Console.WriteLine(list.Count);

list.Sort();
list.Reverse();
list.Clear();
list.IndexOf("1");
list.Insert(0,"2");

ArrayList

  #region ArrayList
  //ArrayList 是一个动态数组 不固定长度和类型
  ArrayList list1 = new ArrayList();
  ArrayList array=new ArrayList() { "你好",1,2,true,new int[] {1,2,3} };
  //获取动态数组的长度
  Console.WriteLine(array.Count);

  array[0] = 100;
  Console.WriteLine(array[0]);

  //1.Add 向ArrayList 的最后位置添加数据
  list1.Add(100);

  //2.AddRange()
  int[] ints2 = {1,2,3,4,5,6};
  list1.AddRange(ints2);
  ArrayList array2 = new ArrayList() {"Hello Word!" };
  list1.AddRange(array2);

  //3.Insert() 在指定索引位置插入数组
  list1.Insert(1,"小丑");

  //4.InsertRange() 在指定的索引位置 插入集合的内容
  list1.InsertRange(2,ints2);

  //5.Clear()
  list1.Clear();

  //6.GetRange() 从集合中截取对应的数据 返回一个新的ArrayList
  //参1:开始索引的位置
  //参2:截取的个数
  ArrayList arr = list1.GetRange(1, 3);

  //7.Remove() 删除动态数组中指定的第一个值
  array.Remove(true);

  //8.RemoveAt() 删除数组中指定索引位置的数据
  array.RemoveAt(0);

  //9.RemoveRange() 删除指定范围数据 从索引1的位置开始删除 删除两个
  array.RemoveRange(1, 2);

  //10.SetRange() 将参数2集合中的数据 复制到当前动态数组中
  //参数1:指定从动态数组中 第几个索引开始
  array.SetRange(0, array2);

  #endregion

Dictionary

 #region Dictionary
 //Dictionary(字典) 使用"键"来操作
 //固定数据类型  长度不固定
 //键: 标识  在一个字典中  键是唯一的 并且不能为null
 //格式:  Dictionary<键的数据类型,值的数据类型>变量名=new
 Dictionary<string,int> dic = new Dictionary<string,int>()
 {
     {"1",666 },
     {"2",222 },
     {"3",444 },
     {"4",555 }
 };

 //向字典中添加数据  参数1:键  参数2:值
 dic.Add("你好", 666);
 //取值
 Console.WriteLine(dic["1"]);

 //修改
 dic["2"] = 333;

 //键值对的个数
 Console.WriteLine(dic.Count);

 //判断字典中是否包含指定的key(键)和Value(值)
 Console.WriteLine(dic.ContainsKey("4"));
 Console.WriteLine(dic.ContainsValue(666));

 #endregion

Hashtable

 #region Hashtable
 //Hashtable  哈希表  表示一系列由键和值组成的数据  使用键访问
 Hashtable hashtable = new Hashtable()
 {
     {1,"1" },
     {2,"2"},
     {1,1 },
     {"2",2 },
     {true,false},
 };
 hashtable.Add("8", "6666");
 Console.WriteLine(hashtable[1]);
 hashtable["2"] = "你好";

 //Keys 获取哈希表中所有的键
 Console.WriteLine(hashtable.Keys);
 //Values 获取哈希表中所有的值
 Console.WriteLine(hashtable.Values);

 //是否拥有固定大小
 Console.WriteLine(hashtable.IsFixedSize);
 //是否只读
 Console.WriteLine(hashtable.IsReadOnly);



 #endregion

SortList

  #region SortList 排序列表
  SortedList sortedList = new SortedList()
  {
      {10,"这是10" },
      {1,"这是1"},
      { 2,"这是2"}
  };
  sortedList.Add(9, "这是9");

  //GetByIndex()  通过索引进行访问  排序列表会自动根据键进行排序,索引为0的时候,获取的键值对是 键最小的那个键对值
  Console.WriteLine(sortedList.GetByIndex(0));
  sortedList[2] = "这个变20了";
  Console.WriteLine(sortedList.GetByIndex(1));

  //GetKey()  通过索引进行访问  获取键值对的 键
  Console.WriteLine(sortedList.GetKey(2));

  foreach (int key in sortedList.Keys)
  {
      Console.WriteLine(key+"\t");
  }
  foreach (string key in sortedList.Values)
  {
      Console.WriteLine(key+"\t");
  }
  Console.WriteLine(sortedList.Count);

  #endregion

Stack

  #region Stack 堆栈
  Stack<string> stack = new Stack<string>();

  //添加元素  推入元素
  stack.Push("张三");
  stack.Push("李四");
  stack.Push("王五");
  Console.WriteLine(stack.Count);

  //移除并返回在堆栈顶部的对象
  Console.WriteLine(stack.Pop());
  //返回在堆栈顶部的对象,但不移除它
  Console.WriteLine(stack.Peek());

  Queue<string> queue = new Queue<string>();
  queue.Enqueue("张三");
  queue.Enqueue("李四");
  queue.Enqueue("王五");
  queue.Dequeue();
  Console.WriteLine(queue.Peek());
  #endregion

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2294590.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript的 switch 方法

• 1. 浅说JavaScript的 switch 方法 • 1.1. 语法 • 1.2. 关键点 • 1.3. 示例 • 1.4. 注意事项 1. 浅说JavaScript的 switch 方法 在JavaScript中&#xff0c;switch 语句是一种多分支选择结构&#xff0c;用于根据不同的条件执行不同的代码块。 它提供了一种比多个…

Mac本地部署DeekSeek-R1下载太慢怎么办?

Ubuntu 24 本地安装DeekSeek-R1 在命令行先安装ollama curl -fsSL https://ollama.com/install.sh | sh 下载太慢&#xff0c;使用讯雷&#xff0c;mac版下载链接 https://ollama.com/download/Ollama-darwin.zip 进入网站 deepseek-r1:8b&#xff0c;看内存大小4G就8B模型 …

[Java基础]函数式编程

Lambda函数 JDK8新增的语法形式, 使用Lambda函数替代某些匿名内部类对象&#xff0c;从而让程序代码更简洁&#xff0c;可读性更好。 基本使用 lambda表达式只能简化函数式接口的匿名内部类写法 // 1.定义抽象类 abstract class Animal {public abstract void crt(); }publi…

Linux 零拷贝技术

一、传统做法&#xff0c;经历“四次拷贝” 数据 1.读取到内核缓冲区 2.拷贝到用户缓冲区 3.写入到内核缓冲区 4.拷贝到网卡 使用 DMA&#xff0c;减少2次拷贝&#xff0c;还剩2次拷贝 DMA 负责硬盘到内核缓冲区和内核到网卡的传输。 CPU 仍需处理内核和用户缓冲区之间的数据…

【完整版】DeepSeek-R1大模型学习笔记(架构、训练、Infra)

文章目录 0 DeepSeek系列总览1 模型架构设计基本参数专家混合模型&#xff08;MoE&#xff09;[DeepSeek-V2提出, DeepSeek-V3改良]多头潜在注意力&#xff08;MLA&#xff09;[DeepSeek-V2提出]多token预测&#xff08;MTP&#xff09;[DeepSeek-V3提出] 2 DeepSeek-R1-Zero及…

数据结构(1)——算法时间复杂度与空间复杂度

目录 前言 一、算法 1.1算法是什么&#xff1f; 1.2算法的特性 1.有穷性 2.确定性 3.可行性 4.输入 5.输出 二、算法效率 2.1衡量算法效率 1、事后统计方法 2、事前分析估计方法 2.2算法的复杂度 2.3时间复杂度 2.3.1定义 2.3.2大O渐进表示法 2.3.3常见时间复…

uniapp小程序自定义中间凸起样式底部tabbar

我自己写的自定义的tabbar效果图 废话少说咱们直接上代码&#xff0c;一步一步来 第一步&#xff1a; 找到根目录下的 pages.json 文件&#xff0c;在 tabBar 中把 custom 设置为 true&#xff0c;默认值是 false。list 中设置自定义的相关信息&#xff0c; pagePath&#x…

C++编程语言:抽象机制:模板(Bjarne Stroustrup)

目录 23.1 引言和概观(Introduction and Overview) 23.2 一个简单的字符串模板(A Simple String Template) 23.2.1 模板的定义(Defining a Template) 23.2.2 模板实例化(Template Instantiation) 23.3 类型检查(Type Checking) 23.3.1 类型等价(Type Equivalence) …

DeepSeek-VL2论文解读:用于高级多模态理解的专家混合视觉语言模型

github:https://github.com/deepseek-ai/DeepSeek-VL2 paper: https://github.com/deepseek-ai/DeepSeek-VL2/blob/main/DeepSeek_VL2_paper.pdf 大型视觉语言模型&#xff08;VLMs&#xff09;已经成为人工智能领域的变革性力量&#xff0c;将大型语言模型&#xff08;LLMs&…

第二个Qt开发实例:在Qt中利用GPIO子系统和sysfs伪文件系统实现按钮(Push Button)点击控制GPIO口(效果为LED2灯的灭和亮)

引言 本文承接博文 https://blog.csdn.net/wenhao_ir/article/details/145420998 里的代码&#xff0c;在那里面代码的基础上添加上利用sysfs伪文件系统实现按钮(Push Button)点击控制GPIO口的代码&#xff0c;进而实现LED2灯的灭和亮。 最终的效果是点击下面的LED按钮实现LED…

Day37-【13003】短文,串的基本概念,匹配算法,算法时间复杂度,真题训练

文章目录 第二节 串串的基本概念串的模式匹配朴素的模式匹配算法(BF算法)算法最坏时间复杂度O(n x m) 改进的模式匹配算法(KMP算法)特征向量next&#xff0c;来确定k值特征向量next的算法实现 算法最坏时间复杂度O(n)进一步改进next值的计算&#xff0c;简化步骤 第四章真题真题…

陷入闭包:理解 React 状态管理中的怪癖

TLDR 闭包就像函数随身携带的背包&#xff0c;包含它们创建时的数据React 组件使用闭包来记住它们的状态和属性过时的闭包可能导致状态更新不如预期时的错误函数式更新提供了一个可靠的方式来处理最新状态 简介 你是否曾经疑惑过&#xff0c;为什么有时你的 React 状态更新不…

【SRC排名】安全应急响应中心SRC上榜记录

2023年 新氧第三 https://security.soyoung.com/top 合合第四 https://security.intsig.com/index.php?m&chall&aindex 2024年 好未来第一 https://src.100tal.com/index.php?m&chall&aindex&#xff08;官网是总榜&#xff0c;年榜只有海报&#xff09;…

Linux——基础命令1

$&#xff1a;普通用户 #&#xff1a;超级用户 cd 切换目录 cd 目录 &#xff08;进入目录&#xff09; cd ../ &#xff08;返回上一级目录&#xff09; cd ~ &#xff08;切换到当前用户的家目录&#xff09; cd - &#xff08;返回上次目录&#xff09; pwd 输出当前目录…

OSPF基础(1):工作过程、状态机、更新

OSPF基础 1、技术背景&#xff08;与RIP密不可分&#xff0c;因为RIP中存在的问题&#xff09; RIP中存在最大跳数为15的限制&#xff0c;不能适应大规模组网周期性发送全部路由信息&#xff0c;占用大量的带宽资源以路由收敛速度慢以跳数作为度量值存在路由环路可能性每隔30秒…

【目标检测】模型验证:K-Fold 交叉验证

K-Fold 交叉验证 1、引言1.1 K 折交叉验证概述 2、配置2.1 数据集2.2 安装包 3、 实战3.1 生成物体检测数据集的特征向量3.2 K 折数据集拆分3.3 保存记录3.4 使用 K 折数据分割训练YOLO 4、总结 1、引言 我们将利用YOLO 检测格式和关键的Python 库&#xff08;如 sklearn、pan…

Unity 2D实战小游戏开发跳跳鸟 - 计分逻辑开发

上文对障碍物的碰撞逻辑进行了开发,接下来就是进行跳跳鸟成功穿越过障碍物进行计分的逻辑开发,同时将对应的分数以UI的形式显示告诉玩家。 计分逻辑 在跳跳鸟通过障碍物的一瞬间就进行一次计分,计分后会同步更新分数的UI显示来告知玩家当前获得的分数。 首先我们创建一个用…

京准:NTP卫星时钟服务器对于DeepSeek安全的重要性

京准&#xff1a;NTP卫星时钟服务器对于DeepSeek安全的重要性 京准&#xff1a;NTP卫星时钟服务器对于DeepSeek安全的重要性 在网络安全领域&#xff0c;分布式拒绝服务&#xff08;DDoS&#xff09;攻击一直是企业和网络服务商面临的重大威胁之一。随着攻击技术的不断演化…

Android学习20 -- 手搓App2(Gradle)

1 前言 昨天写了一个完全手搓的&#xff1a;Android学习19 -- 手搓App-CSDN博客 后面谷歌说不要用aapt&#xff0c;d8这些来搞。其实不想弄Gradle的&#xff0c;不过想着既然开始了&#xff0c;就多看一些。之前写过一篇Gradle&#xff0c;不过是最简单的编译&#xff0c;不涉…

车型检测7种YOLOV8

车型检测7种YOLOV8&#xff0c;采用YOLOV8NANO训练&#xff0c;得到PT模型&#xff0c;转换成ONNX&#xff0c;然后OPENCV的DNN调用&#xff0c;支持C&#xff0c;python,android开发 车型检测7种YOLOV8