c# 字典按ascii 排序_C# 集合

本文介绍了C#中的集合,包括非泛型集合如ArrayList和Hashtable,以及泛型集合如List<T>和Dictionary<TKey, TValue>。ArrayList作为杂货铺般的集合,允许存储多种类型对象,而Hashtable通过键值对提高查询效率。泛型集合List<T>解决了类型转换问题,确保集合内元素类型一致。同时,文章提到了foreach循环在遍历集合时的便利性。" 86647802,7508498,JMeter连接数据库实战:Oracle、MySQL配置详解,"['jmeter', '数据库测试', '性能测试', 'Oracle数据库', 'MySQL数据库']
摘要由CSDN通过智能技术生成

数组可以保存多个兑现个,但是某些情况下无法确定到底需要保存多少个对象,由于数组的长度不可变,因此数组将不再适用。

为了保存这些数目不确定的对象C#提供了一系列特殊的类,这些类可以储存任意类型的对象,并且长度可变,统称为集合

集合分类:可以分为非泛型集合和泛型集合,二者均间接实现了IEnumerble接口

非泛型集合:

非泛型集合位于System.Collection命名空间,它可以存储多种类型的对象,其中在常用的是ArrayList集合和Hashtable集合。

泛型集合:

泛型集合位于System.Collection.Generic命名空间,它只能存储一种类型的对象,其中最常见用的是List<T>泛型集合和Dictionary<TKey,TValue>泛型集合。

非泛型集合类ArrayList:

ArrayList集合就像是一个杂货铺,可以容纳不同类型的对象,例如:可以将int,string,object等类型对象同时加入到ArrayList集合中,ArrayList集合提供额一系列添加,删除,移动,修改,查询元素等操作方法。

6e390a14fb433db97b67e1deea7a8777.png

它还有一个属性:Capacity表示集合容量,它的计算方法和集合长度有关,它容量是4的倍数,比如集合的长度是3,它的容量就是4,比如长度是6,它的容量就是8。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;

namespace 非泛型集合ArrayList
{
    class Program
    {
        static void Main(string[] args)
        {
            //初始化器
            ArrayList array = new ArrayList() { 1, 2, 3, 4 };


            打印集合
            //Print(array);
            集合中元素排序反转
            //array.Reverse();
            打印反转后的集合
            //Print(array);
            #region 添加元素的方法

            //AddRange方法添加集合到ArrayList集合中
            array.AddRange(new ArrayList() { "zhangsan", "lisi" });
            Console.WriteLine("打印元素");
            Print(array);

            Add方法添加
            array.Add(22);
            Console.WriteLine("打印元素");
            Print(array);

            //Insert方法
            array.Insert(1, "你好");
            Console.WriteLine("打印元素");
            Print(array);
            #endregion
            #region 查找的方法
            bool flag = array.Contains(2);
            Console.WriteLine("集合有是否包含指定元素的结果为:" + flag);
            int a = array.IndexOf(3);
            Console.WriteLine("集合中指定查找元素的第一个所在位置的索引为" + a);
            int b = array.LastIndexOf(4);
            Console.WriteLine("集合中指定查找元素的第一个所在位置的索引为" + b);

            #endregion
            #region 移除元素的方法
            array.Remove(1);
            array.RemoveAt(0);
            array.Clear();
            #endregion

            Console.ReadKey();
        }

        static void Print(ArrayList array)
        {
            for (int i = 0; i < array.Count; i++)
            {
                Console.WriteLine(array[i]);
            }
        }
    }
}

Foreach循环

虽然for循环可以用于遍历集合中的元素,但写法上比较繁琐,为了简化书写,C#提供了foreach循环

Foreach循环遍历集合时,无需循环条件

Foreach 循环语法格式:

Foreach(var item in collection)

{

执行语句;

}

Item变量用于储存每次遍历的元素(默认情况下item为var类型),in为关键字,collection为被遍历的集合

说明:

Foreach循环的次数是由元素的个数决定的,每次循环时,foreach 中都是通过变量将当前循环中的元素记住,从而将集合中的元素遍历输出,实际上,foreach不仅可以遍历集合,还可以遍历数组,可以说foreach循环专门用于变量集合和数组的循环语句。

注意:

Foreach循环只能对遍历到的元素进行读操作,且只能单向遍历,也就是一个元素在foreach循环中只能被访问一次,所以在遍历集合中优先选择foreach,如果需要修改或者需要多次访问某个元素时,在考虑使用for循环

Hashtable集合 非泛型集合类

在ArrayList集合中查找某个元素时,是从索引位置为0的元素开始逐一进行比对的,这就好像一本没有目录的字典中查找某个汉字一样,这样查询的效率极低,为此C#提供了Hashtable集合,该集合又被称为键值对集合,所谓的键就类似于字典中的目录,值就类似于字典中的具体的信息,键与值是对应关系,通过唯一的键能找到对应的值,因此Hashtable这种特性大大提高了查询效率

常用方法

f73019b8ff4549553728360c49e0d29e.png
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;

namespace 非泛型集合Hashtable
{
    class Program
    {
        static void Main(string[] args)
        {
            //实例化对象
            Hashtable ht = new Hashtable();
            //添加元素
            ht.Add(1, "C#");
            ht.Add(2, "Java");
            ht.Add(3, "Python");
            //遍历集合
            Print(ht);
            PrintOne(ht);
            PrintTwo(ht);
            //移除键指定元素
            ht.Remove(1);
            Print(ht);
            //移除所有元素
            ht.Clear();
            Print(ht);
            Console.ReadKey();

        }
        //第一种遍历集合,是通过键来遍历集合
        static void Print(Hashtable ht)
        {
            foreach (var key in ht.Keys)
            {
                Console.Write(key+":"+ht[key]+"n");
            }
        }
        //第二种遍历集合,是通过值来遍历集合,但是这种遍历方式,是没法显示键
        static void PrintOne(Hashtable ht)
        {
            foreach (var value in ht.Values)
            {
                Console.WriteLine(value);
            }
        }
        //第三种遍历集合,是通过对象来遍历,通过这种方式可以访问键和值
        static void PrintTwo(Hashtable ht)
        {
            foreach (DictionaryEntry DiEn in ht)
            {
                Console.WriteLine(DiEn.Key + ":" + DiEn.Value);
            }
        }
    }
}

注意:在Hashtable集合中键和值的默认类型都是object,因此可以向键和值中添加任意类型的对象,在遍历Hashtable集合时,除了通过键来获取对应的值外,还可以直接遍历集合的值或者集合对象DictionaryEntry

List<T>泛型集合

ArrayList集合与Hashtable集合可以存储多种类型的元素,由于集合中的元素类型不一致,在很多情况下,使用foreach循环获取集合中的元素时,需要对他们进行强制类型转换,这种操作大大降低了程序的执行效率,为了解决这个问题,C#提出了泛型集合概念,泛型集合相当于集合制定了某个限制条件,这个条件使集合中只能存储一种类型的元素

List<T>是一种常用的泛型集合,T指某种数据类型,如int,string等,该集合不仅具备ArrayList集合的功能,而且还可以保证List<T>集合只能添加同类型元素,不会出现类型转换的问题

Max()最大值 Min()最小值 Sum()求和

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Generic;

namespace ConsoleApp3
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> list = new List<string>() { "北京", "欢迎", "您", "!" };
            list.Add("运动会");
            Print(list);
            List<int> list1 = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            Console.WriteLine("集合中最大的值是:{0}", list1.Max());
            Console.WriteLine("集合中最小的值是:{0}", list1.Min());
            Console.WriteLine("集合中元素的总和是:{0}", list1.Sum());
            Console.ReadKey();

        }

        static void Print(List<string> list)
        {
            foreach (string item in list)
            {
                Console.Write(item);
            }
            Console.WriteLine();
        }
        
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值