当前位置: 首页 > article >正文

C#基础总结:常用的数据结构

Array:

需要处理的元素数量确定并且需要使用下标时可以考虑,不过建议使用List
数组的内容都是相同类型
数组可以直接通过下标访问
创建时需要固定数组大小

int size = 5; 
int [] test =  new int [size]; 
        
string [] test2 =  new string [3]; 
//赋值 
test2[0] =  "chen" ; 
test2[1] =  "j"  ; 
test2[2] =  "d" ; 
//修改 
test2[0] =  "chenjd" ; 

//排序
int[] myArray = { 4, 3, 5, 1, 2 };
Array.Sort(myArray);

//获取索引
int value = Array.IndexOf(myArray, 5);

//Array.Copy(sourceArray, destinationArray, length): 将一个数组的元素复制到另一个数组中。
int[] myArray = { 4, 3, 5, 1, 2 };
int[] newArray = new int[6];
//Array.Copy(sourceArray, destinationArray, length)
//length是从原数组复制的长度
Array.Copy(myArray, newArray, 4);



ArrayList:

不必在声明ArrayList时指定它的长度
ArrayList可以存储不同类型的元素
ArrayList不是类型安全的
引入时,泛型还未出现,后泛型集合类(如 List)因其类型安全性和性能优势而变得流行

常用方法:

//new
ArrayList arrayList = new ArrayList();

//Add
arrayList.Add("Hello");
arrayList.Add(123);

//使用 Insert 方法在特定位置插入一个对象:
arrayList.Insert(0, "First");

//移除元素 - 使用 Remove 方法移除一个对象:
arrayList.Remove("Hello");
arrayList.RemoveAt(4); 

//修改数据 
arrayList[4] = 26; 

//获取元素索引 - 使用 IndexOf 方法获取对象在 ArrayList 中的索引:
int index = arrayList.IndexOf(123);

List泛型List:

需要处理的元素数量不确定时 通常建议使用
在声明List集合时,我们同时需要为其声明List集合内数据的对象类型,这点又和Array很相似,其实List内部使用了Array来实现
融合了Array可以快速访问的优点以及ArrayList长度可以灵活变化的优点

特点:
1.顺序存储,改查快,增(插入)删慢;
使用 Add 将新元素添加在末尾是很快的,但是使用 Insert 将新元素添加在其他位置就不同了。因为这样会导致后面元素的移动位置(后移),删除同样道理,会导致后面元素的位置前移。这样效率是很低的!
2.长度可变,容量不够会自动扩容;
每次扩容,容量增加一倍。
3.需要指定数据类型,保证类型安全

常用属性:

//Capacity:容量
Console.WriteLine("intList 的当前容量为:{0}", intList.Capacity);  // intList 的当前容量为:4

//Count:获取 List<T> 中包含的元素数量。
Console.WriteLine("intList 中的元素数量为:{0}", intList.Count);  // intList 中的元素数量为:3

常用方法:

//1.New - 构造
 List<string > test4 =  new List< string >();   
 
//2.Add:新增数据   
test4.Add(“Fanyoy”);   
test4.Add(“Chenjd”);   //List<T>是无所谓初始长度的,可以用Add()方法往里面添加元素

//3.Insert: 插入数据
List<int> intList = new List<int> {1, 2, 3};
intList.Insert(1, 666);
intList.Insert(2, 888);

//[]:[]的实现,直接使用了数组的索引方式获取元素。
//修改数据   
test4[1] = “murongxiaopifu”;   

//移除数据   
test4.Clear();	//移除所有元素

List<int> intList = new List<int> {1, 1, 2};
intList.RemoveAt(1); 	//移除指定下标元素
intList.Remove(1);		

//RemoveAll:移除与指定的谓词所定义的条件相匹配的所有元素。
List<int> intList = new List<int> {1, 2, 3};
intList.RemoveAll(x => x > 1);  // 删除所有大于1的元素

//Contains:确定某元素是否在 List<T> 中。
Console.WriteLine(strList.Contains(666) ? "元素存在" : "元素不存在");  // 元素存在

//Find:搜索与指定谓词所定义的条件相匹配的元素,并返回整个 List<T> 中的第一个匹配元素
List<int> intList = new List<int> {1, 2, 3};
int ret = intList.Find(x => x > 2);
Console.WriteLine(ret);  // 3
 
//IndexOf:返回 List<T> 或它的一部分中某个值的第一个匹配项的从零开始的索引
List<string> strList = new List<string> {"a", "b", "c"};
Console.WriteLine(strList[1]);  // b
Console.WriteLine(strList.IndexOf("b"));  // 1  

//Reverse:将 List<T> 或它的一部分中元素的顺序反转。
List<int> intList = new List<int> {1, 2, 3};
intList.Reverse();

//Sort:排序
List<int> intList = new List<int> {4, 5, 1, 3, 2};
intList.Sort();
foreach(var element in intList)
{
    Console.Write(element + " ");
}
// 1 2 3 4 5

Dictionary<K,T>:

需要键值对,快速操作
字典的实现方式就是哈希表的实现方式,只不过 字典是类型安全的 ,也就是说当创建字典时,必须声明key和item的类型
键值对中的键和值都可以是任何类型的(泛型),但是键必须唯一且不能为 null,而值可以不唯一;
增删改查速度快,查找一个值的时间复杂度接近 O(1);
长度不固定,动态扩容;
比较消耗内存(以空间换时间);

Dictionary<int, string> testDict = new Dictionary<int, string>();
testDict.Add(1, "a");
testDict.Add(2, "b");
testDict.Add(3, "c");
foreach (KeyValuePair<int, string> element in testDict)
{
    Console.WriteLine("{0} {1}", element.Key, element.Value);
}

常用属性:

//Count:获取包含在 Dictionary<TKey,TValue> 中的键/值对的数目。
Console.WriteLine("testDict 中元素(键值对)的数量为:{0}", testDict.Count);

//Keys:获得一个包含 Dictionary<TKey,TValue> 中的键的集合。
foreach (object key in testDict.Keys)
{
    Console.Write(key + " ");
}
// 1 2 3

//Values:获得一个包含 Dictionary<TKey,TValue> 中的值的集合。
foreach (object value in testDict.Values)
{
    Console.Write(value + " ");
}
// a b c

常用方法:

//add
testDict.Add(2, "b");

//Clear:清空字典
testDict.Clear();

//ContainsKey:确定是否 Dictionary<TKey,TValue> 包含指定键。
Console.WriteLine(testDict.ContainsKey("王五"));  // True
Console.WriteLine(testDict.ContainsKey("赵六"));  // False

//ContainsValue:确定 Dictionary<TKey,TValue> 是否包含特定值。
Console.WriteLine(testDict.ContainsValue(99));  // True
Console.WriteLine(testDict.ContainsValue(100));  // False

//Remove:将带有指定键的元素(键值对)从 Dictionary<TKey,TValue> 中移除。
testDict.Remove("sex");

//TryGetValue
string value = "";
bool ret = testDict.TryGetValue("name", out value);  // 存在:true 不存在:false
Console.WriteLine("以 name 为键的键值对 {0},对应的值为:{1}", ret ? "存在" : "不存在", value);


区别:
List只是一组项目,Dictionary是一组键值对


项目使用场景:

字典跟枚举一起使用
字典:
public Dictionary<SENSOR_POWER, double> StandbyCurrent = new Dictionary<SENSOR_POWER, double>();

private static Dictionary<string, DTController> _dtControllers = new Dictionary<string, DTController>();

设置枚举结构数据的数组:
public enum CURRENT_RANGE
{
CURRENT_RANGE_MA = 0, ///<电流测试量程为mA
CURRENT_RANGE_UA, ///<电流测试量程为uA
CURRENT_RANGE_NA ///<电流测试量程为nA
};

CURRENT_RANGE[] currentRange = new CURRENT_RANGE[7];

static可作为流程间的交互方法来使用


http://www.kler.cn/a/562078.html

相关文章:

  • Kotlin 知识点二 延迟初始化和密封类
  • SGLang中context-length参数的默认值来源解析
  • 【MySQL】安装MySQL
  • 【学习笔记】Kubernetes
  • 【星云 Orbit-F4 开发板】03b. 按键玩法二:独立按键双击双击触发
  • IOS网络安全体系结构 网络安全体系架构
  • 【Java 常用注解学习笔记3】——Java 常用注解扩展与完善
  • MySQL 数据库基础详细解释和示例
  • 数据结构之【链表简介】
  • vi 编辑器的使用
  • DeepSeek开源周Day2:DeepEP - 专为 MoE 模型设计的超高效 GPU 通信库
  • Web前端开发——HTML基础
  • Cassini_Network-Aware Job Schedulingin Machine Learning Clusters
  • 【【Systemverilog学习参考 简单的加法器验证-含覆盖率】】
  • unity学习51:所有UI的父物体:canvas画布
  • 鸿蒙5.0实战案例:har和hsp的转换
  • “深入解析 SQL Server 子查询:从基础到应用”
  • 安全开发-环境选择
  • AGI分级探索:从OpenAI到DeepMind,展望未来AI图景
  • Ubuntu从零创建Hadoop集群