• C#编程(五十二)----------有序列表


    有序列表

    如果需要基于对所有集合排序,就可以使用SortedList<TKey,TValue>.这个类按照键给元素排序.这个集合中的值和键都可以使用任意类型.

    下面的例子创建了一个有序列表,其中键和值类型都是string.默认的构造函数创建了一个空列表,再用Add()方法添加书.使用重载的构造函数.可以定义列表的容量,传递实现了IComparer<TKey>接口的对象,该接口用于给列表中的元素排序.

    使用Add(Tkey,Tvalue)方法,第一个参数是键,第二个参数是值.除了使用Add()方法之外,还可以使用索引器添加元素到列表中.索引器需要把键作为索引参数.如果键已存在,Add()方法就抛出一个ArgumentException类型的异常.如果所引起使用相同的键,就用新值代替旧值.

    SortedList<TKey,TValue>类只允许每个键有一个对应的值,如果需要每个键对应多个之,可以使用Lookup<TKey,TELement>.

    案例:

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    using System.Threading.Tasks;

    namespace 有序列表

    {

        class Program

        {

            static void Main(string[] args)

            {

                //如果要用排好顺序的表,可以使用SortedList<TKey,TValue>来给元素排序

                SortedList<string, string> books = new SortedList<string, string>();

                books.Add("tangseng", "001");

                books.Add("sunwukong", "002");

                books.Add("zhubajie", "003");

                books.Add("shaheshang", "004");

                //键是不允许重复,下面我们用Add方法重新添加一次tangseng

                //books.Add("tangseng","hahah");抛出异常

                //但是如果使用索引来赋值,如果键存在,则覆盖,不存在,相当于使用Add方法

                books["tangseng"] = "hahaha";

                foreach (var item in books.Keys)

                {

                    Console.WriteLine(item);

                }

                foreach (var item in books.Values)

                {

                    Console.WriteLine(item);

                }

                //一次性遍历键值

                foreach (KeyValuePair<string, string> item in books)

                {

                    Console.WriteLine("名字: {0} , 序号 : {1}", item.Key, item.Value);

                }

                /*

                 * 分析结果可知,tangseng被替换成了hahaha

                 * 

                 * 下面简单介绍一下SortedList<TKey,TValue>中的方法与属性

                 * Capacity 这个属性用来设置与得到有序列表的容量,IList一样,也时成倍增长的

                 * Comparer 返回与有序列表相关的比较器,可以从构造函数中传入该比较器

                 * Remove() RemoveAt() 按键删除与按索引删除

                 * ContainsKey();ContainsValue;检查是不是有包含指定值的键,或者值

                 * TryGetValue() 尝试获得指定键的值,如果有就是true,并用out把值带回来,没有就是false                          

                 */

                //按键删除

                Console.WriteLine("按键删除");

                books.Remove("tangseng");

                foreach (KeyValuePair<string, string> item in books)

                {

                    Console.WriteLine("名字 : {0}, 序号 : {1}", item.Key, item.Value);

                }

                //可以看出tangseng被删除了

                //下面我们按索引删除

                books.RemoveAt(0);

                Console.WriteLine("按索引删除");

                foreach (KeyValuePair<string, string> item in books)

                {

                    Console.WriteLine("名字 : {0}, 序号 : {1}", item.Key, item.Value);

                }

                //结果中看出shaheshang被删除,证明删除索引是以排序后的顺序为准,不是以插入的顺序为准

                //检查是否包含tangseng,检查是否包含zhubajie()

                Console.WriteLine("检查是否包含tangseng: {0}", books.ContainsKey("tangseng"));

                Console.WriteLine("检查是否包含zhubajie: {0}", books.ContainsKey("zhubajie"));

                //检查是否包含001,检查是否包含002()

                Console.WriteLine("是否包含001: {0}", books.ContainsValue("001"));

                Console.WriteLine("是否包含002: {0}", books.ContainsValue("002"));

                //此处的索引值是按排序后的顺序

                int keyIndex = books.IndexOfKey("zhubajie");

                Console.WriteLine("zhubajie的索引值: {0}", keyIndex);

                string value = "";

                if (books.TryGetValue("tangseng",out value))

                {

                    Console.WriteLine("得到了tangseng的值 : {0}",value);

                }

                string value2 = "";

                if (books.TryGetValue("zhubajie", out value2))

                {

                    Console.WriteLine("得到了zhubajie的值 : {0}", value2);

                }

                Console.ReadKey();

            }

        }

    }

    分析:使用ValuesKeys属性访问值和键.如果尝试使用索引器访问一个元素,但所传递的键不存在,就会抛出异常.为了避免一场,可以使用ContainsKey()方法,如果所传递的键存在于集合中,这个方法返回true,也可以调用TryGetValue()方法,该方法尝试获得指定键的值.如果指定键对应的值不存在,该方法就会抛出异常.

  • 相关阅读:
    CDB中plug PDB
    Oracle Flashback Technologies
    Oracle Flashback Technologies
    Oracle Flashback Technologies
    Oracle Flashback Technologies
    Oracle Flashback Technologies (总)
    Unplugging一个PDB
    使用已有PDB克隆PDB
    Oracle 12C -- 使用seed PDB创建新的pdb
    ROW_NUMBER() OVER函数的基本用法
  • 原文地址:https://www.cnblogs.com/android-blogs/p/6609844.html
Copyright © 2020-2023  润新知