C# 基础知识系列- 3 集合数组 (2)

Count 表示获取一个int类型的的数量值,LongCount表示获取一个long类型的数量值。通常情况下两者返回的结果是一致的,但是如果列表中元素的数量超过了int允许的最大返回直接使用 Count获取将会出现数据溢出的问题,这时候就需要LongCount了。

访问元素/修改元素

C#的列表操作单个元素很简单 ,与数组的操作方式完全一样。

string str = list1[0];//获取 list1 的第一个元素,即下标为0的元素

list1[2] = "233"; // 将 list1 的第三个元素设置为“233” ,即下标为2 的元素,这里假设list1有至少三个元素
```
需要注意的地方是,如果给定的下标超过了List对象的索引值范围会报ArgumentOutOfRangeException。判断方法就是 下标>= Count,如果满足就会越界。
3. Add或AddRange 添加到列表最后

将元素添加到List的末尾,`Add`添加一个,`AddRange`添加一组,支持数组、列表。 ```c# List<string> list = new List<string>();// 初始化一个空的列表 list.Add("12");//list = {"12"} List<string> list1 = new List<string>{"14", "2"}; list.AddRange(list1);// list = {"12","14","2"} ```

Insert(int index, T item)或InsertRange(int index,IEnumerable<T> items) 插入

Insert(int index,T item) 在 index 下标处插入一个元素,该下标以及该下标以后的元素依次后移

InsertRange(int index,IEnumerable<T> items) 在index下标处插入一组元素,该下标以及之后的元素依次后移

示例:

List<int> arr1 = new List<int>{1, 9, 28, 5, 3, 6, 0, 12, 44, 98, 4, 2, 13, 18, 81, 92}; arr1.Insert(3,37);// arr1 = 1,9,28,37,5,3,6,0,12,44,98,4,2,13,18,81,92 下标为3的元素变成了37,之后的元素依次后移了 List<int> arr1 = new List<int>{1, 9, 28, 5, 3, 6, 0, 12, 44, 98, 4, 2, 13, 18, 81, 92}; List<int> arr2 = new List<int>{2,3,4,5}; arr1.InsertRange(2,arr2);//arr1= 1,9,2,3,4,5,28,5,3,6,0,12,44,98,4,2,13,18,81,92 可以明显发现下标为2的元素发生了变化

Contains(T item) 是否包含
返回一个Boolean类型的结果,如果包含则返回true,如果不包含则返回false

List<int> arr2 = new List<int>{2,3,4,5}; arr2.Contains(8);//false arr2.Contains(3);//true

Remove(T item) 删除指定元素

List<int> arr2 = new List<int>{2,3,4,5}; arr2.Remove(3);// arr2 = 2,4,5 arr2.Remove(6);//arr2 = 2,4,5

值得注意的是,如果删除一个不存在的元素时,不会报错,列表也不会发生任何改变。

RemoveAt(int index) 删除位于下标的元素

List<int> arr2 = new List<int>{2,3,4,5}; arr2.RemoveAt(1);//arr2 = 2,4,5

如果移除的下标超过了列表的最后一个元素的下标将会抛出异常

RemoveRane(IEnumerable<T> items) 删除一组元素

与Remove(T item)一致,如果要删除的元素不在列表中,则列表元素不会发生变化。

List<int> arr1 = new List<int>{1, 9, 28, 5, 3, 6, 0, 12, 44, 98, 4, 2, 13, 18, 81, 92}; List<int> arr2 = new List<int>{2,3,4,5}; arr1.RemoveRange(arr2);

GetRange(int index,int count)

从列表中获取一个子列表,从index开始,获取count个元素,如果源列表中从index开始剩余的元素不足count个将会报错。

1.2.3 不常用但有用的方法

Clear()删除所有元素

将列表清空,调用方法之后,列表中将不包含任何元素

Reverse() 调转顺序

将列表按照从尾到头的顺序进行排列

IndexOf(T item) 查找下标

查找元素在列表中的下标,如果没找到元素,则返回-1

Sort()排序

对列表进行排序,调用方法后,会按照默认排序方法返回一个排序结果

1.3 Set 集合

C#没有为Set单独设置类,一方面是因为Set出镜率不高,另一方面也因为Set本身的机制所致。Set集合不能包含重复元素,如果尝试存入重复元素集合元素将不会发生任何变化。
Set集合中元素的顺序与存放顺序不一定相同。因为Set集合中存放对于使用者而言是乱序存放的。
我们常用的Set集合有 HashSet<T>和SortSet<T>,其他的Set相关类则属于更加少见。至少在我5年多的开发经历中没有用过。

1.3.1 HashSet<T> 和SortSet<T>

HashSet 俗称 哈希集合或者哈希Set,内部使用Hash值作为元素的唯一性验证,即调用对象的HashCode()方法作为Hash值的来源。

SortSet 顾名思义,排序集合,它每次在插入的时候都会对元素进行一次排序

1.3.2 共同点

初始化

两者相同的地方就是 都有以下几种初始化方法

Set<T> set = new HashSet<T>();// = new SortSet<T>(); 初始化一个空的集合 //使用一个集合对象初始化 Set<T> set1 = new HashSet<T>(IEnumerable<T> items);// = new SortSet<T>(IEnumerable<T> items); Set<T> set2 = new HashSet<T>(){T t1, T t2, T t3};// 与上一种一样

添加元素

set1.Add(item);// 集合只支持添加单个元素,但是可以通过集合运算的方式增加多个元素

移除元素

set1.Remove(item);//删除集合中与item判断相等的元素

访问元素

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgzzyw.html