集合

本文详细介绍了ArrayList和Hashtable集合。ArrayList集合可进行添加、删除、插入、排序等操作,其长度可变,但取值需类型转换;Hashtable是键值对集合,键唯一,可进行赋值、输出、判断键值是否存在等操作,还能实现简繁转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、ArrayList集合

1.1、给集合中添加

1、Add(给集合添加单个元素)添加数据很好添加,但是如果添加类,显示类只能显示类的命名空间,而不能显示类的方法,由于ArrayList是一个集合因此在访问是用索引来访问,因此用list[i]来表示每一个数据的位置,但是list[i]为object类型,想要利用数据必须使用数据的强制转换。

        static void Main(string[] args)
        {
            ArrayList list = new ArrayList();
            list.Add(1);
            list.Add(10.5);
            list.Add(true);
            list.Add("张三");

            Person p = new Person();
            list.Add(p);
            list.Add(new int[] { 1, 2, 3, 4, 5 });
            list.Add(list);
            for(int i=0;i<list.Count;i++)
            {
                Console.WriteLine(list[i]);
            }
            Console.ReadKey();
        }
    }
    public class Person
    {
        public void SayHello()
        {
            Console.WriteLine("我是人类");
        }
    }

如果想显示类的方法就要用is和强制转换

        static void Main(string[] args)
        {
            ArrayList list = new ArrayList();
            list.Add(1);
            list.Add(10.5);
            list.Add(true);
            list.Add("张三");

            Person p = new Person();
            list.Add(p);
            list.Add(new int[] { 1, 2, 3, 4, 5 });
            list.Add(list);
            list.AddRange(list);
            for(int i=0;i<list.Count;i++)
            {
               if(list[i] is Person)
                {
                    ((Person)list[i]).SayHello();
                }
               else if(list[i] is int[])
                {
                    for(int j=0;j<((int[])list[i]).Length;j++)
                    {
                        Console.WriteLine(((int[])list[i])[j]);
                    }
                }
               else if(list[i] is ArrayList)
                {

                }
                else
                {
                    Console.WriteLine(list[i]);
                }
            }
            Console.ReadKey();
        }
    }
    public class Person
    {
        public void SayHello()
        {
            Console.WriteLine("我是人类");
        }
    }

2、AddRange(给集合添加集合)

        static void Main(string[] args)
        {
            ArrayList list = new ArrayList();
            list.AddRange(new int[] { 1, 2, 3, 4, 5 });
            list.AddRange(new string[] { "张三", "李四" });
            list.AddRange(list);
            for(int i=0;i<list.Count;i++)
            {
                Console.WriteLine(list[i]);
            }
            Console.ReadKey();
        }

1.2 删除集合中的元素

1、Clear删除集合中所有的元素
2、Remove删除集合中指定的元素
3、RemoveAt根据索引来删除元素,注意在给集合添加集合时,其索引下标并不是整体,而是集合内的元素
例如:
list.Add(1);
list.Add(true);
list.AddRange(new int[]{1,2,3,4,5,6});
1为[0],true为[1],{1}为[2],{2}为[3]…
那么List.RemoveAt(2);就是删除{1}
4、RemoveRange删除集合

1.3 向集合中插入

1、Insert插入单个元素:list.Insert(1,“我是新来的”);
2、InsertRange插入一个集合:list.InsertRange(0,new string[]{"娃哈哈 ",“科比”,“林书豪”});

1.4 升序排列

Sort
数据必须是同一类型的比较
例如:
list.Add(1);
list.Add(5);
list.Add(3);
list.Sort();

1.5 判断是否包含某个元素

Contains:
list.Contains(Number)

1.6 练习题

(1)向ArrayList集合中添加一个整数类型的数组,求集合中的最大值最小值总和平均数

        static void Main(string[] args)
        {
            ArrayList list = new ArrayList();
            list.AddRange(new int[] { 1, 2, 3, 4, 5 });
            int max = (int)list[0];
            int min = (int)list[0];
            int sum = 0;
            for (int i = 0; i < list.Count; i++)
            {
                sum += (int)list[i];
                if ((int)list[i]>max)
                {
                    max = (int)list[i];
                }
                if((int)list[i]<min)
                {
                    min = (int)list[i];
                }
            }
            Console.WriteLine("最大值为{0},最小值为{1},总和为{2},平均值为{3}", max, min, sum, sum / list.Count);
            Console.ReadKey();
        }

(2)写一个长度为10的集合,要求在里面随机的存放10个数字(0—9),
但是要求里面所有的数字不重复。

        static void Main(string[] args)
        {
            //写一个长度为10的集合,要求在里面随机的存放10个数字(0—9),
            //但是要求里面所有的数字不重复。
            ArrayList list = new ArrayList();
            Random r = new Random();
            //不用先创建一个集合,往list中添加数据就相当于创建集合了
            for(int i=0;i<10;i++)
            {
                int Number = r.Next(0, 10);
                if(!list.Contains(Number))
                {
                    list.Add(Number);
                }
                else
                {
                    i--;//当包含同样的数字时,就i--,是i永远小于10,直到
                       //不包含同样的数字时i=10,退出循环
                }
            }

            for(int i=0;i<list.Count;i++)
            {
                Console.WriteLine(list[i]);
            }
            Console.ReadKey();
        }

1.7集合的长度

1、数组的长度不可以改变,集合的长度可以任意的改变。
2、两个属性
(1)Count :集合中实际包含的元素个数
(2)Capcity:集合中可以包含的元素个数
list.Add(0)
list.Add(0)
list.Add(0)
list.Add(0)此时开辟了四块空间
若再添加一个数据
list.Add(0)
list.Add(0)
list.Add(0)
list.Add(0)
list.Add(0)此时就开辟了八块空间 ,意思是原来的四块空间以占满,在添加一个数据的话就要再开辟四块空间,当新开辟的空间再一次占满时,再添加一个数据就会再开辟四块空间。

1.8 集合与数组的比较

1、集合
集合相对于数组的好处
1)、长度可变
2)、可以添加任意类型的元素
不好的地方:
从集合中取值的时候必须要不停的做类型转换

2、Hashtable集合

2.1 Hashtable概念

(1)一般称Hashtable为键值对集合或字典,即根据键来找值
(2)创建键值对对象的代码:Hashtable ht=new Hashtable();
(3)在键值对集合中,键一定是唯一的,不能重复的,而值是可以重复的。

2.2 赋值与输出

(1)用这种方法添加,如果键相同则抛异常
ht.Add(键,值);
ht.Add(1,“张三”);
ht.Add(‘c’,true);
ht.Add(3.14,100);
用这种方法添加,如果键相同则替换值,如果键不同,则添加一个新值,不会抛异常。
ht[5]=“李四”;
ht[1]=“王五”;
(2)单一输出:
Conso.WriteLine(ht[键]);
Conso.WriteLine(ht[1]);
Conso.WriteLine(ht[‘c’]);
Conso.WriteLine(ht[3.14]);
(3)循环输出:
foreach(var(循环的每一项的类型) item(代表集合中的每一项) in ht.keys(要循环的集合))
{
Console.WriLine(“键-------{0},值--------{1}”,item,ht[item]);
}
(4)C#是一门强类型语言,就是对变量的类型必须有一个明确的定义
弱类型语言:例如javascript,对变量的类型不需要有一个明确的定义
(5)var可以通过变量的值来推断出来这个变量的类型。
缺点:用var声明变量是要求必须要给变量赋予初值,但是在很多情况下我们声明变量不一定要给其赋值

2.3 方法

(1)ht.Containskey判断集合中是否包含指定的键
(2)ht.ContainsValue判断集合中是否包含指定的值
(3)ht.Remove根据键来删除数据

2.4 简繁转换

根据用户输入的简体我们将其输出一个繁体
简体: private const String Jian = “啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺”
繁体:private const String Fan = “啊阿埃挨哎唉哀皚癌藹矮艾礙愛隘鞍氨咹俺按暗岸胺”

        static void Main(string[] args)
        {
            Hashtable hs = new Hashtable();
            for(int i=0;i<Jian.Length;i++)
            {
                hs.Add(Jian[i],Fan[i]);
            }
            Console.WriteLine("请输入字符串");
            string input = Console.ReadLine();
            for(int j=0;j<input.Length;j++)
            {
               if(hs.ContainsKey(input[j]))
               {
                    Console.Write(hs[input[j]]);
               }
               else
               {
                    Console.Write(input[j]);
               }
            }
            Console.ReadKey();
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值