【C#学习记录】五、集合

目录

集合

集合:很多类型的一个集合

数组:长度不可变,类型单一

集合的好处:长度可以任意改变,类型随便

泛型集合:长度可以任意改变,类型单一

ArrayList集合和Hashtable都在System.Collections

集合类型 特点
数组 长度不可变,类型单一,类型存放进去类型不变
ArrayList 长度可变,可以存放任意类型,类型存放进去转换为object类型
List<> 长度可变,和ArrayList对应,但是只能存放单一类型,类型存放进去类型不变
Hashtable 长度可变,键值对集合,可以存放任意类型,类型存放进去转换为object类型
Dictionary<> 长度可变,键值对集合,和Dictionary对应,只能存放单一类型,类型存放进去类型不变

ArrayList集合

常用方法

添加元素

  1. list.Add()

我们将一个对象输出到控制台,默认情况下,打印的就是这个对象所在的类的命名空间

using System.Collections;
using 集合练习;

Person p = new Person();
ArrayList list = new ArrayList();
list.Add(1);
list.Add(3.14);
list.Add(true);
list.Add("张三");
list.Add(5000m);
list.Add(new int[] { 1,2,3,4,5,6,7,8,9});
list.Add(p);
list.Add(list);
for (int i = 0; i < list.Count; i++)
{
    Console.WriteLine(list[i]);
}
Console.ReadKey();

运行结果:

【C#学习记录】五、集合

往list里面加任何类型的元素之后,都会转换成object类型,所以放进去类之后,我们想要得到类的内容,我们需要将object类强转成子类。

  1. list.AddRange()

往集合里面添加数组或者集合的时候,用list.AddRange();

list.AddRange(new int[]{1,2,3,4,5});
list.AddRange(list);

需要注意的是,添加集合或数组的时候,这个集合和数组不是作为一个元素添加进去的.数组和集合里的元素都将作为被添加集合的元素.

删除元素

  1. list.Clear()

    删除全部元素

  2. list.Remove(item)

    删除单个元素,写谁删谁

  3. list.RemoveAt(index)

    根据下标删除单个元素

  4. list.RemoveRange(StartIndex,EndIndex)

    根据下标去移除一定范围的元素

排序

  1. list.Sort()

    元素排序

  2. list.Reverse()

    元素反转

插入元素

  1. list.Insert(index,item)

    在指定的位置插入一个元素

  2. list.InsetRange(index,item)

    在指定的位置插入一个数组或集合

查找元素

  1. list.Contains(item)

    判断集合中是否有某个元素

集合长度的问题

count和capcity两个属性

  1. list.Count

    表示这个集合中实际包含的元素的个数

  2. list.Capcity

    表示这个集合中可以包含的元素的个数

每次集合中实际包含的元素个数(count)超过了可以包含的元素的个数(capcity)的时候,集合就会向内存中申请多开辟一倍的空间,来保证集合的长度一直够用.

Hashtable集合

基本概念

Hashtable 键值对集合[注意:t为小写]

foreach 的效率远远高于for循环

键值对集合对象中,键必须是唯一的,值可以重复。

var

C#是一门强类型语言

var可以根据变量的赋值自动判断类型,但是尽量别用

常用方法

键值对集合对象[键] = 值;

using System.Collections;

Hashtable ht = new Hashtable();
ht.Add(1, "张三");
ht.Add(2, true);
ht.Add(3, '男');
ht.Add(false, "错误的");
//在键值对集合中,是根据键去找值的
foreach (var item in ht)
{
    Console.WriteLine(item);
    //Console.WriteLine(ht[item]);
}
Console.WriteLine("==========================");
foreach (var item in ht.Keys)
{
    Console.WriteLine(item);
    //Console.WriteLine(ht[item]);
}
Console.WriteLine("==========================");
foreach (var item in ht.Values)
{
    Console.WriteLine(item);
    //Console.WriteLine(ht[item]);
}
Console.WriteLine("==========================");

注意:使用foreach遍历集合元素的时候,不能直接输出,例如上面的输出为:

【C#学习记录】五、集合

直接遍历Hashtable输出的是元素对象的命名空间。

添加数据的方式

  1. ht.Add(键,值)

    这种方法不会检查有没有重复的键

  2. ht[键] = 值;

    这种方法首先会检查当前集合中有没有该键,如果没有,则新建一个,如果有,则覆盖。

检查是否包含元素

  1. ht.Contains()

  2. ht.ContainsKey()

  3. ht.ContainsValue()

移除元素

  1. ht.Clear()
  2. ht.Remove()

泛型集合

定义与赋值

List<int> list = new List<>();
list.Add(1);
list.AddRange(new int[] {2,3,4,5,6});
list.AddRange(list);

集合和数组之间的转换

int[] nums = list.ToArray();
List<int> list2 = nums.ToList();

string[] strs = listStr.ToArray();
List<string> listStr = strs.ToList();

字典集合

用法

//Dictionary<int, string> dic = new Dictionary<int, string>();
//dic.Add(1,"zhangsan");
//dic.Add(2,"lisi");
//dic.Add(3,"wangwu");

//Console.WriteLine(dic[1]);
//dic[1] = "新来的";
//Console.WriteLine(dic[1]);

//foreach (int item in dic.Keys)
//{
//    Console.WriteLine("{0}---{1}",item,dic[item]);
//}
//foreach (KeyValuePair<int,string> kv in dic)
//{
//    Console.WriteLine("{0}---{1}",kv.Key,kv.Value);
//}
//Console.ReadKey(); 

//将一个数组中的奇数放在一个集合中,再将偶数放在另一个集合中
//最终将两个集合合并为一个集合,并且奇数显示在左边,偶数显示在右边

using System.Collections;

int[] nums = new int[]{ 0,2,5,6,9,87,46,1,489,56};
List<int> list1 = new List<int>();
List<int> list2 = new List<int>();
foreach (int item in nums)
{
    if (item%2 == 0)
    {
        list2.Add(item);
    }
    else
    {
        list1.Add(item);
    }
}
list1.AddRange(list2);
foreach (int item in list1)
{
    Console.Write(item+" ");
}
Console.WriteLine();

//提醒用户输出一个字符串,通过foreach循环将用户输入的字符串赋值
//给一个字符数组
String strOfUsers = Console.ReadLine();
List<char> strsOfUsers = new List<char>();
foreach (var item in strOfUsers)
{
    strsOfUsers.Add(item);
}

//统计 Welcome to China中每个字符出现的次数,不考虑大小写。
string strWelcome = "Welcome to China";
strWelcome = strWelcome.ToLower();//分析一下这一句,内存空间有没有更改?
Dictionary<char, int> dicCount = new Dictionary<char,int>();
foreach (char item in strWelcome)
{
    if (dicCount.Keys.Contains(item))
    {
        dicCount[item] += 1;
    }
    else
    {
        dicCount.Add(item,1);
    }
}

Console.ReadKey();
上一篇:ios 当margin-left margin-right 超过设备宽度


下一篇:HCIP(华为高级网络安全工程师)(实验七)(BGP综合实验)