最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#存儲相同鍵多個值的Dictionary實例詳解

 更新時間:2020年03月10日 11:11:19   作者:Tulip123  
在本篇文章里小編給大家整理的是關(guān)于C#存儲相同鍵多個值的Dictionary實例內(nèi)容,需要的朋友們可以學(xué)習(xí)下。

涉及到兩個問題:

一、訪問磁盤中文件夾、文件夾下面的文件夾

先看一下磁盤文件夾結(jié)構(gòu)

C盤下面有個根文件夾SaveFile,SaveFIle下面有兩個子文件夾分別為,2018、2019,

子文件下2018下面有兩個子文件夾18120和18131

子文件下2019下面有兩個子文件夾18120和18129

現(xiàn)在希望把SaveFile子文件夾和子文件夾下面的文件夾的名稱存起來,也就是下面這樣的

2018       18120

       18131

2019  18120

     18129

二、基于以上的結(jié)構(gòu)我們要怎么樣存數(shù)據(jù)呢

其實我一開始自己也沒繞出來的,最初想到的是使用Dictionary,鍵值對的方式存數(shù)據(jù),但是一開始沒想那么多,就一頓猛操作,發(fā)現(xiàn)有一個問題

不能存在相同鍵????突然有點(diǎn)懵逼,不知道咋寫了,,,,此時又想到了用哈希表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");
  }
  else
  {
  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\路徑下的子目錄
      DirectoryInfo[] dii = baseDir.GetDirectories();//存SaveFile文件夾子目錄
foreach (var item in dii) { dic.Add(item.Name,null); YearStr.Add(item.Name);//將SaveFile文件夾添加到Y(jié)earStr集合中
  }
  DirectoryInfo dir; 
  foreach (var item in YearStr)
  {
   dir = new DirectoryInfo(SavePath+@"\"+item);          //存SaveFile文件夾子目錄下的子目錄          DirectoryInfo[] diis = dir.GetDirectories();
  List<string> Panlelst = new List<string>() { };//用來保存value
  foreach (var item2 in diis)
  {
   if (dic.ContainsKey(item))//如果Dictionary中包含了某個鍵
   {
   Panlelst.Add(item2.Name);//值添加值集合中
   dic[item] = Panlelst;//賦值到對應(yīng)key中
   } 
  }
  }
  //遍歷字典
  foreach (KeyValuePair<string, List<string>> kvp in dic)
  {
  foreach (var item in kvp.Value)
  {
   Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, item);
  }  
  }
  Console.ReadLine(); 
  #endregion
 }
 }

ok,我嘗試成功啦,

輸出結(jié)果看一下

再貼一些dictionary的一些常見用法吧,溫故知新

 static void Main(string[] args)
 {
  //創(chuàng)建泛型哈希表,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.顯示容量和元素個數(shù)
  Console.WriteLine("元素個數(shù):{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方法獲取指定鍵對應(yīng)的值
  string slove = string.Empty;
  if (myDictionary.TryGetValue(5, out slove))
  {
  Console.WriteLine("查找結(jié)果:{0}", slove);
  }
  else
  {
  Console.WriteLine("查找失敗");
  }
  //10.清空哈希表
  //myDictionary.Clear();
  Console.ReadKey();
 }

1.HashTable

哈希表(HashTable)表示鍵/值對的集合。在.NET Framework中,Hashtable是System.Collections命名空間提供的一個容器,用于處理和表現(xiàn)類似key-value的鍵值對,其中key通??捎脕砜焖俨檎?,同時key是區(qū)分大小寫;value用于存儲對應(yīng)于key的值。Hashtable中key-value鍵值對均為object類型,所以Hashtable可以支持任何類型的keyvalue鍵值對,任何非 null 對象都可以用作鍵或值。

在哈希表中添加一個key/鍵值對:HashtableObject.Add(key,); 

在哈希表中去除某個key/鍵值對:HashtableObject.Remove(key);

從哈希表中移除所有元素: HashtableObject.Clear();

判斷哈希表是否包含特定鍵key: HashtableObject.Contains(key);

2.Dictionary

Dictionary表示鍵和值的集合。

Dictionary<string, string>是一個泛型

他本身有集合的功能有時候可以把它看成數(shù)組

他的結(jié)構(gòu)是這樣的:Dictionary<[key], [value]>

他的特點(diǎn)是存入對象是需要與[key]值一一對應(yīng)的存入該泛型

通過某一個一定的[key]去找到對應(yīng)的值

3.HashTable和Dictionary的區(qū)別:http://www.fzitv.net/article/182337.htm

(1).HashTable不支持泛型,而Dictionary支持泛型。

(2). Hashtable 的元素屬于 Object 類型,所以在存儲或檢索值類型時通常發(fā)生裝箱和拆箱的操作,所以你可能需要進(jìn)行一些類型轉(zhuǎn)換的操作,而且對于int,float這些值類型還需要進(jìn)行裝箱等操作,非常耗時。

(3).單線程程序中推薦使用 Dictionary, 有泛型優(yōu)勢, 且讀取速度較快, 容量利用更充分。多線程程序中推薦使用 Hashtable, 默認(rèn)的 Hashtable 允許單線程寫入, 多線程讀取, 對 Hashtable 進(jìn)一步調(diào)用 Synchronized() 方法可以獲得完全線程安全的類型. 而 Dictionary 非線程安全, 必須人為使用 lock 語句進(jìn)行保護(hù), 效率大減。

(4)在通過代碼測試的時候發(fā)現(xiàn)key是整數(shù)型Dictionary的效率比Hashtable快,如果key是字符串型,Dictionary的效率沒有Hashtable快。

ok,今天的分享就到這里啦,有問題歡迎指出。

到此這篇關(guān)于C#存儲相同鍵多個值的Dictionary實例詳解的文章就介紹到這了,更多相關(guān)C#存儲相同鍵多個值的Dictionary方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#入門教程之集合ArrayList用法詳解

    C#入門教程之集合ArrayList用法詳解

    這篇文章主要介紹了C#入門教程之集合ArrayList用法,結(jié)合具體實例分析了C#中集合的概念、功能、創(chuàng)建與使用方法,需要的朋友可以參考下
    2017-06-06
  • C#實現(xiàn)軟件防破解和防調(diào)試的幾種有效措施

    C#實現(xiàn)軟件防破解和防調(diào)試的幾種有效措施

    軟件保護(hù)在現(xiàn)代應(yīng)用程序開發(fā)中變得越來越重要,尤其是在面對軟件盜版、調(diào)試和破解等問題時,在C#開發(fā)中,雖然沒有完全防止破解的辦法,但通過采取一些有效的防護(hù)措施,可以顯著增加破解的難度并保護(hù)軟件的知識產(chǎn)權(quán),本篇文章將探討在C#中實現(xiàn)軟件防破解和防調(diào)試的幾種常見技術(shù)
    2025-03-03
  • C#利用正則判斷輸入是否為純數(shù)字、容器類

    C#利用正則判斷輸入是否為純數(shù)字、容器類

    這篇文章主要介紹了C#利用正則判斷輸入是否為純數(shù)字、容器類的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • 使用數(shù)字簽名實現(xiàn)數(shù)據(jù)庫記錄防篡改(Java實現(xiàn))

    使用數(shù)字簽名實現(xiàn)數(shù)據(jù)庫記錄防篡改(Java實現(xiàn))

    本文主要介紹了Java中使用數(shù)字簽名實現(xiàn)數(shù)據(jù)庫記錄防篡改的方法與步驟。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • C#遞歸算法之快速排序

    C#遞歸算法之快速排序

    快速排序由C.A.R發(fā)明,它依據(jù)中心元素的值,利用一系列遞歸調(diào)用將數(shù)據(jù)表劃分成越來越小的子表。在每一步調(diào)用中,經(jīng)過多次的交換,最終為中心元素找到最終的位置。
    2016-06-06
  • C# 異步多線程入門到精通之ThreadPool篇

    C# 異步多線程入門到精通之ThreadPool篇

    ThreadPool 是 .net 2.0 時代的產(chǎn)物,有了 Thread 為什么還會有 ThreadPool 呢?ThreadPool 可以做到限制線程數(shù)量、重用線程
    2021-11-11
  • c# 實現(xiàn)計時器功能

    c# 實現(xiàn)計時器功能

    這篇文章主要介紹了c# 實現(xiàn)計時器功能的示例代碼,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-12-12
  • C#實現(xiàn)多線程的同步方法實例分析

    C#實現(xiàn)多線程的同步方法實例分析

    這篇文章主要介紹了C#實現(xiàn)多線程的同步方法,實例分析了C#線程同步的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • C#中父窗口和子窗口之間控件互操作實例

    C#中父窗口和子窗口之間控件互操作實例

    這篇文章主要介紹了C#中父窗口和子窗口之間控件互操作的方法,實例分析了父窗口與子窗口互操作的技巧,需要的朋友可以參考下
    2015-01-01
  • C#實現(xiàn)XSL轉(zhuǎn)換的方法

    C#實現(xiàn)XSL轉(zhuǎn)換的方法

    這篇文章主要介紹了C#實現(xiàn)XSL轉(zhuǎn)換的方法,結(jié)合實例分析了C#執(zhí)行XSL轉(zhuǎn)換XML的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11

最新評論

扶沟县| 诏安县| 会东县| 兴城市| 兴安盟| 衡阳市| 新竹县| 得荣县| 凤台县| 科技| 布拖县| 通辽市| 荥阳市| 平塘县| 霍邱县| 比如县| 抚远县| 商水县| 澄迈县| 遵义市| 米泉市| 闸北区| 栖霞市| 疏勒县| 新沂市| 延吉市| 宝兴县| 门源| 牡丹江市| 卢氏县| 青龙| 吉安县| 江安县| 若尔盖县| 汤阴县| 萍乡市| 通河县| 木里| 佛教| 八宿县| 淮滨县|