备案 控制台
学习
实践
活动
专区
工具
TVP
写文章
专栏首页 Kitty的日常笔记 C# 存储相同键多个值的Dictionary
2 0

海报分享

C# 存储相同键多个值的Dictionary

涉及到两个问题:

一、访问磁盘中文件夹、文件夹下面的文件夹

先看一下磁盘文件夹结构

C盘下面有个根文件夹SaveFile,SaveFIle下面有两个子文件夹分别为,2018、2019,

子文件下2018下面有两个子文件夹18120和18131

子文件下2019下面有两个子文件夹18120和18129

现在希望把SaveFile子文件夹和子文件夹下面的文件夹的名称存起来,也就是下面这样的

2018 18120

18131

2019  18120

18129

二、基于以上的结构我们要怎么样存数据呢

其实我一开始自己也没绕出来的,最初想到的是使用Dictionary,键值对的方式存数据,但是一开始没想那么多,就一顿猛操作,发现有一个问题

不能存在相同键????突然有点懵逼,不知道咋写了

此时又想到了用哈希表Hashtable

下面是Hashtable简单使用的方法

using System;
using System.Collections;
namespace CollectionsApplication
   class Program
      static void Main(string[] args)
         Hashtable ht = new Hashtable();
         ht.Add("001", "Zara Ali");
         ht.Add("002", "Abida Rehman");
         ht.Add("003", "Joe Holzner");
         ht.Add("004", "Mausam Benazir Nur");
         ht.Add("005", "M. Amlan");
         ht.Add("006", "M. Arif");
         ht.Add("007", "Ritesh Saikia");
         if (ht.ContainsValue("Nuha Ali"))
            Console.WriteLine("This student name is already in the list");
            ht.Add("008", "Nuha Ali");
         // 获取键的集合 
         ICollection key = ht.Keys;
         foreach (string k in key)
            Console.WriteLine(k + ": " + ht[k]);
         Console.ReadKey();
   }

Hashtable和Dictionary都存在一个问题不能存在相同键的问题,那我还是比较想使用Dictionary,接下来我们来尝试一下Dictionary完成吧,using Systemusing System.Collections;namespace CollectionsApplication { class Program {

    private const string SavePath = @"C:\SavaFile\";
       public static List<string> YearStr = new List<string>() { };//存年份
        //存年份和编号
      public static  Dictionary<string,List<string>> dic = new Dictionary<string,List<string>>() { };
      static void Main(string[] args)
           #region
            DirectoryInfo baseDir = new DirectoryInfo(SavePath);//读取C:\SavaFile\路径下的子目录

ok,我尝试成功啦,

输出结果看一下

再贴一些dictionary的一些常见用法吧,温故知新

 static void Main(string[] args)
            //创建泛型哈希表,Key类型为int,Value类型为string
            Dictionary<int, string> myDictionary = new Dictionary<int, string>();
            //1.添加元素
            myDictionary.Add(1, "a");
            myDictionary.Add(2, "b");
            myDictionary.Add(3, "c");
            //2.删除元素
            myDictionary.Remove(3);
            //3.假如不存在元素则添加元素
            if (!myDictionary.ContainsKey(4))
                myDictionary.Add(4, "d");
            //4.显示容量和元素个数
            Console.WriteLine("元素个数:{0}",myDictionary.Count);
            //5.通过key查找元素
            if (myDictionary.ContainsKey(1))
                Console.WriteLine("key:{0},value:{1}","1", myDictionary[1]);
                Console.WriteLine(myDictionary[1]);            
            //6.通过KeyValuePair遍历元素
            foreach (KeyValuePair<int,string>kvp in myDictionary)
                Console.WriteLine("key={0},value={1}", kvp.Key, kvp.Value);
            //7.得到哈希表键的集合
            Dictionary<int, string>.KeyCollection keyCol = myDictionary.Keys;
                //遍历键的集合
                foreach (int n in keyCol)
                    Console.WriteLine("key={0}", n);                
            //8.得到哈希表值的集合
            Dictionary<int, string>.ValueCollection valCol = myDictionary.Values;
                //遍历值的集合
                foreach( string s in valCol)
                Console.WriteLine("value:{0}",s);
            //9.使用TryGetValue方法获取指定键对应的值
            string slove = string.Empty;
            if (myDictionary.TryGetValue(5, out slove))
                Console.WriteLine("查找结果:{0}", slove);
                Console.WriteLine("查找失败");