狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C#中Dictionary的用法(取值/新增/編輯/刪除/排序)及用途【Good!】

admin
2021年3月5日 11:35 本文熱度 4794
Dictionary是一個泛型,他本身有集合的功能有時候可以把它看成數組,他的結構是這樣的:
Dictionary<[key], [value]>
他的特點是存入對象是需要與[key]值一一對應的存入該泛型,通過某一個一定的[key]去找到對應的值。舉個例子:
//實例化對象
Dictionary<int,string>dic=new Dictionary<int,string>();

//元素添加,要確保key還沒有,否則會報錯
dic.Add(1, "one");
dic.Add(2, "two");
dic.Add(3, "one");
//另外一種元素添加方法,無需判斷key是否存在,無則新增,有則更新
dic[1]="one";
dic[2]="two";
dic[3]="one";

//提取元素的方法
string a = dic[1];
string b = dic[2];
string c = dic[3];
//1、2、3是鍵,分別對應“one”“two”“one”
//上面代碼中分別把值賦給了a,b,c
//注意,鍵相當于找到對應值的唯一標識,所以不能重復
//但是值可以重復

//更新元素,其實和上面的新增是同一個,無需判斷key是否存在,無則新增,有則更新
dic[1]="one";
dic[2]="two";
dic[3]="one";

更詳細用法以 key 的類型為 int,value 的類型為 string 為例:
//創建及初始化
Dictionary<int,string>myDictionary=new Dictionary<int,string>();

//添加元素,要確保key還沒有,否則會報錯
myDictionary.Add(1,"C#");
myDictionary.Add(2,"C++");
myDictionary.Add(3,"ASP.NET");
myDictionary.Add(4,"MVC");
//另外一種元素添加方法,無需判斷key是否存在,無則新增,有則更新
myDictionary[1]="C#";
myDictionary[2]="C++";
myDictionary[3]="ASP.NET";
myDictionary[4]="MVC";

//通過Key查找元素
if(myDictionary.ContainsKey(1))
{
      Console.WriteLine("Key:{0},Value:{1}","1", myDictionary[1]);
}

//通過KeyValuePair遍歷元素
foreach(KeyValuePair kvp in myDictionary)
{
   Console.WriteLine("Key = {0}, Value = {1}",kvp.Key, kvp.Value);
}

//僅遍歷鍵 Keys 屬性
Dictionary.KeyCollection keyCol=myDictionary.Keys;
foreach(int key in keyCol)
{
    Console.WriteLine("Key = {0}", key);
}

//僅遍歷值 Valus屬性
Dictionary.ValueCollection valueCol=myDictionary.Values;
foreach(string value in valueCol)
{
     Console.WriteLine("Value = {0}", value);
}

//通過Remove方法移除指定的鍵值
myDictionary.Remove(1);
if(myDictionary.ContainsKey(1))
{
  Console.WriteLine("Key:{0},Value:{1}","1", myDictionary[1]);
}
else{
     Console.WriteLine("不存在 Key : 1");
}

//遍歷key

foreach (string key in openWith.Keys)

{

    Console.WriteLine("Key = {0}", key);

}


//遍歷value

foreach (string value in openWith.Values)

{

    Console.WriteLine("value = {0}", value);

}

 

//遍歷value, Second Method

Dictionary<string, string>.ValueCollection valueColl = openWith.Values;

foreach (string s in valueColl)

{

    Console.WriteLine("Second Method, Value = {0}", s);

}


//遍歷字典

foreach (KeyValuePair<string, string> kvp in openWith)

{

    Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value);

}


//判斷鍵存在

if (openWith.ContainsKey("bmp")) // True

{

    Console.WriteLine("An element with Key = \"bmp\" exists.");

}


參數為其他類型:

//參數為其它類型

Dictionary<int, string[]> OtherType = new Dictionary<int, string[]>();

OtherType.Add(1, "1,11,111".Split(','));

OtherType.Add(2, "2,22,222".Split(','));

Console.WriteLine(OtherType[1][2]);


幾條建議:
1、給Dictionary添加元素時,建議直接用中括號的方式,而不是使用Add方法。
任何鍵key都必須是唯一的,不能添加相同key的鍵值,不然就會報錯。雖然不管是用[]還是Add方法,調用的都是Dictionary的Insert函數,但是區別在于用Add函數的話,如果已經存在同樣的鍵對值,會直接拋出ArgumentException,這意味著后續的代碼都不執行了,這可很要命,明明是一個小問題,可看上去可能是一個大Bug。而用中括號屬性的方法,如果不存在會添加,如果存在則進行改寫,只要key值不為null,是不會拋出異常的。

2、利用TryGetValue(TKey key, out TValue value)接口獲取Dictionary中的數據。
法一:ContainsKey(key) 方法:
if(myDictionary.ContainsKey(key))
{
    // 通過key索引value
    int resValue = myDictionary[key];
}
法二:TryGetValue方法:
int resValue ;
myDictionary.TryGetValue(key, out resValue);
根據key取value,最好使用 TryGetValue 而不是 ContainsKey+ 根據key索引value。使用TryGetValue更快,性能更好,因為只用了一次查找,TryGetValue 比 ContainsKey 后使用[key]取value,速度快一倍。TryGetValue更安全,找不到value時返回false;而使用ContainsKey后使用[key]取value取不到時,會拋出異常導致真機卡死。
string GetDictionaryVal(string strkey)
{
    if (!dicTest.ContainsKey(strkey))
    {
        return string.Empty;
    }

    return dicTest[strkey];
}
上面這段代碼其實非常正確,但是從效率的角度上看卻對dictionary進行兩遍的查找:ContainsKey和下標操作各一次。所以我們可以這么寫:
string GetDictionaryVal(string strkey)
{
    string strVal = string.Empty;
    dicTest.TryGetValue(strkey, out strVal);
    return strVal;
}
TryGetValue函數的返回值為bool值,表示是否存在于Dictionary中。


如果你還看不懂我最后給你舉一個通俗的例子:
有一缸米,你想在在每一粒上都刻上標記,不重復,相當于“鍵”當你找的時候一一對應不會找錯,這就是這個泛型的鍵的-作用,而米可以一樣,我的意思你明白了吧?

  • 常用屬性

  • 名稱說明
    Comparer獲取用于確定字典中的鍵是否相等的 IEqualityComparer<T>。
    Count獲取包含在 Dictionary<TKey, TValue> 中的鍵/值對的數目
    Item獲取或設置與指定的鍵相關聯的值。
    Keys 獲取包含 Dictionary<TKey, TValue> 中的鍵的集合。
    Values 獲取包含 Dictionary<TKey, TValue> 中的值的集合。
  • 常用方法

名稱說明
Add  將指定的鍵和值添加到字典中。
Clear從 Dictionary<TKey, TValue> 中移除所有的鍵和值
ContainsKey  確定 Dictionary<TKey, TValue> 是否包含指定的鍵
ContainsValue  確定 Dictionary<TKey, TValue> 是否包含特定值
GetEnumerator返回循環訪問 Dictionary<TKey, TValue> 的枚舉器
GetObjectData實現 System.Runtime.Serialization.ISerializable 接口,并返回序列化 Dictionary<TKey, TValue> 實例所需的數據
GetType獲取當前實例的 Type。 (繼承自 Object。)
MemberwiseClone創建當前 Object 的淺表副本。 (繼承自 Object。)
OnDeserialization實現 System.Runtime.Serialization.ISerializable 接口,并在完成反序列化之后引發反序列化事件。
Remove從 Dictionary<TKey, TValue> 中移除所指定的鍵的值 TryGetValue 獲取與指定的鍵相關聯的值。
Equals(Object) 確定指定的 Object 是否等于當前的 Object。 (繼承自 Object。
Finalize允許對象在“垃圾回收”回收之前嘗試釋放資源并執行其他清理操作。(繼承自 Object。)
GetHashCode用作特定類型的哈希函數。 (繼承自 Object。)
-------------------------------------------------------------------------

c# 對dictionary類進行排序用什么接口實現

如果使用.Net Framework 3.5的話,事情就很簡單了。呵呵。
如果不是的話,還是自己寫排序吧。

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

namespace DictionarySorting    //排序,通過KeyValuePair遍歷元素
{
class Program
{
static void Main(string[] args)
{
Dictionary<int,string>dic=new Dictionary<int,string>();
dic.Add(1, "HaHa");
dic.Add(5, "HoHo");
dic.Add(3, "HeHe");
dic.Add(2, "HiHi");
dic.Add(4, "HuHu");
var result = from pair in dic orderby pair.Key select pair;    //關鍵在本行
foreach (KeyValuePair pair in result)
{
Console.WriteLine("Key:{0}, Value:{1}", pair.Key, pair.Value);
}
Console.ReadKey();
}
}
}

【執行結果】
Key:1, Value:HaHa
Key:2, Value:HiHi
Key:3, Value:HeHe
Key:4, Value:HuHu
Key:5, Value:HoHo

Dictionary的基本用法。假如:
需求:現在要導入一批數據,這些數據中有一個稱為公司的字段是我們數據庫里已經存在了的,目前我們需要把每個公司名字轉為ID后才存入數據庫。
分析:每導一筆記錄的時候,就把要把公司的名字轉為公司的ID,這個不應該每次都查詢一下數據庫的,因為這太耗數據庫的性能了。
解決方案:在業務層里先把所有的公司名稱及相應的公司ID一次性讀取出來,然后存放到一個Key和Value的鍵值對里,然后實現只要把一個公司的名字傳進去,就可以得到此公司相應的公司ID,就像查字典一樣。對,我們可以使用字典Dictionary操作這些數據。
示例:SetKeyValue()方法相應于從數據庫里讀取到了公司信息。

///
/// 定義Key為string類型,Value為int類型的一個Dictionary
///
///
protected Dictionary SetKeyValue()
{
Dictionary<int,string>dic=new Dictionary<int,string>();
dic.Add("公司1", 1);
dic.Add("公司2", 2);
dic.Add("公司3", 3);
dic.Add("公司4", 4);
return dic;
}

///
/// 得到根據指定的Key行到Value
///
protected void GetKeyValue()
{
Dictionary myDictionary = SetKeyValue();
//測試得到公司2的值
int directorValue = myDictionary["公司2"];
Response.Write("公司2的value是:" + directorValue.ToString());
}

該文章在 2021/3/5 16:10:33 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved