Dictionary摘抄

Dictionary,字典,键值对集合。

下面的代码示例创建一个空的带有字符串键的字符串 Dictionary,并使用 Add 方法添加一些元素。该示例演示在尝试添加重复的键时 Add 方法引发ArgumentException

该示例使用 Item 属性(在 C# 中为 索引器)来检索值,演示当请求的键不存在时将引发 KeyNotFoundException,并演示与键相关联的值可被替换。

该示例演示当程序必须经常尝试字典中不存在的键值时,如何使用 TryGetValue 方法作为一种更有效的方法来检索值,它还演示如何使用ContainsKey 方法在调用 Add 方法之前测试某个键是否存在。

该示例演示如何枚举字典中的键和值,以及如何分别使用 Keys 属性和 Values 属性来单独枚举键和值。

最后,该示例演示 Remove 方法。

using System;
using System.Collections.Generic;

public class Example
{
    public static void Main()
    {
        //创建一个字典,键是字符串类型,值是字符串类型。
        Dictionary<string, string> openWith =new Dictionary<string, string>();

             
        //在字典中添加一些元素。不能有重复的键,可以有重复的值。
        openWith.Add("txt", "notepad.exe");
        openWith.Add("bmp", "paint.exe");
        openWith.Add("dib", "paint.exe");
        openWith.Add("rtf", "wordpad.exe");

        // 如果新键已经在字典中,则添加方法将引发异常。
        try
        {
            openWith.Add("txt", "winword.exe");
        }
        catch (ArgumentException)
        {
            Console.WriteLine("该键名已经在字典中存在");
        }

        // 可以直接通过:字典对象名["键名称"] 访问该键对应的值。
        Console.WriteLine(" value = {0}", openWith["rtf"]);

       

        // 可以通过给键重新赋值来改变键的值
        openWith["rtf"] = "winword.exe";
        Console.WriteLine(" key = \"rtf\", value = {0}.",openWith["rtf"]);
      
       // 如果键名在字典集合中不存在,赋值时就新建。
        openWith["doc"] = "winword.exe";
        Console.WriteLine(" key = \"doc\",value ={0}", openWith["doc"]);
      
     // 如果请求的键不在字典中,则抛出异常。
     try
     {
         Console.WriteLine("For key = \"tif\", value = {0}.",openWith["tif"]);
     }
     catch (KeyNotFoundException)
     {
         Console.WriteLine("Key = \"tif\" is not found.");
     }

       //当一个程序经常要获取键对应的值时,用TryGetValue获取与指定的键相关联的值效率高。
        string value = "";
     if (openWith.TryGetValue("txt", out value))
     {
         Console.WriteLine("For key = \"txt\", value = {0}.", value);
     }
     else
     {
         Console.WriteLine("Key = \"tif\" is not found.");
     }


        //  用ContainsKey测试是否包含指定的键
        if (!openWith.ContainsKey("ht"))
       {
            Console.WriteLine("不包含,我想创建");
           openWith.Add("ht", "hypertrm.exe");
           Console.WriteLine("Value added for key = \"ht\": {0}",openWith["ht"]);
       }


        //当使用foreach遍历字典中元素时,元素检索KeyValuePair对象
        foreach (KeyValuePair<string, string> kvp in openWith)

        {
            Console.WriteLine("Key = {0}, Value = {1}",
                kvp.Key, kvp.Value);
        } 
        //普通遍历
        //foreach (var kvp in openWith)
        //{
        //    Console.WriteLine("Key = {0}, Value = {1}",
        //      kvp.Key, kvp.Value);
        //}



        //要获得单独的值,使用值属性
         Dictionary<string, string>.ValueCollection valueColl = openWith.Values;
         Console.WriteLine();//输出空行
        //遍历输出,注意valueColl是强类型,要使用匹配的类型。 使用var未定义类型也可以输出。
        foreach (string s in valueColl)
        {
            Console.WriteLine("Value = {0}", s);
        }

        // 要获得单独的键,使用键属性
        Dictionary<string, string>.KeyCollection keyColl =openWith.Keys;
        Console.WriteLine();
       //遍历输出
      foreach (string s in keyColl)
      {
          Console.WriteLine("Key = {0}", s);
      }


   
        // 使用Remove方法移除键值对
        Console.WriteLine("\nRemove(\"doc\")");
        openWith.Remove("doc");

        if (!openWith.ContainsKey("doc"))
        {
            Console.WriteLine("Key \"doc\" is not found.");
        }

        Console.ReadKey();
    }
}


  

 
System.Object 
  System.Collections.Generic.Dictionary
posted @ 2016-11-29 10:13  hao_1234_1234  阅读(240)  评论(0编辑  收藏  举报