博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# Dictionary用法总结
阅读量:7169 次
发布时间:2019-06-29

本文共 4588 字,大约阅读时间需要 15 分钟。

C# Dictionary用法总结

1、用法1: 常规用

  增加键值对之前需要判断是否存在该键,如果已经存在该键而且不判断,将抛出异常。所以这样每次都要进行判断,很麻烦,在备注里使用了一个扩展方法

public 
static 
void 
DicSample1()
{
 
    
Dictionary<String, String> pList =
new 
Dictionary<String, String>();
    
try
    
{
        
if 
(pList.ContainsKey(
"Item1"
) ==
false
)
        
{
            
pList.Add(
"Item1"
,
"ZheJiang"
);
        
}
        
if 
(pList.ContainsKey(
"Item2"
)==
false
)
        
{
            
pList.Add(
"Item2"
,
"ShangHai"
);
        
}
        
else
        
{
            
pList[
"Item2"
] =
"ShangHai"
;
        
}
        
if 
(pList.ContainsKey(
"Item3"
) ==
false
)
        
{
            
pList.Add(
"Item3"
,
"BeiJiang"
);
        
}
         
    
}
    
catch 
(System.Exception e)
    
{
        
Console.WriteLine(
"Error: {0}"
, e.Message);
    
}
   
 
    
//判断是否存在相应的key并显示
    
if 
(pList.ContainsKey(
"Item1"
))
    
{
        
Console.WriteLine(
"Output: " 
+ pList[
"Item1"
]);
    
}
 
    
//遍历Key
    
foreach 
(
var 
key
in 
pList.Keys)
    
{
        
Console.WriteLine(
"Output Key: {0}"
, key);
    
}
 
    
//遍历Value
    
foreach 
(String value
in 
pList.Values)
    
{
        
Console.WriteLine(
"Output Value: {0}"
, value);
    
}
    
//遍历Key和Value
    
foreach 
(
var 
dic
in 
pList)
    
{
        
Console.WriteLine(
"Output Key : {0}, Value : {1} "
, dic.Key, dic.Value);
    
}
}

  

  2、用法2:Dictionary的Value为一个数组

/// <summary>
/// Dictionary的Value为一个数组
/// </summary>
 
public 
static 
void 
DicSample2()
 
{
     
Dictionary<String, String[]> dic =
new 
Dictionary<String, String[]>();
     
String[] ZheJiang =  {
"Huzhou"
,
"HangZhou"
,
"TaiZhou" 
};
     
String[] ShangHai = {
"Budong"
,
"Buxi" 
};
     
dic.Add(
"ZJ"
, ZheJiang);
     
dic.Add(
"SH"
, ShangHai);
     
Console.WriteLine(
"Output :" 
+ dic[
"ZJ"
][0]);
 
}

  3、用法3: Dictionary的Value为一个类

//Dictionary的Value为一个类
public 
static 
void 
DicSample3()
 
{
     
Dictionary<String, Student> stuList =
new 
Dictionary<String, Student>();
     
Student stu =
null
;
     
for 
(
int 
i = 0; i < 3; i++ )
     
{
         
stu =
new 
Student();
         
stu.Name = i.ToString();
         
stu.Name =
"StuName" 
+ i.ToString();
         
stuList.Add(i.ToString(), stu);
     
}
 
     
foreach 
(
var 
student
in 
stuList)
     
{
         
Console.WriteLine(
"Output : Key {0}, Num : {1}, Name {2}"
, student.Key, student.Value.Name, student.Value.Name);
     
}
 
}

  

Student类:

public 
class 
Student
{
    
public 
String Num {
get
;
set
; }
    
public 
String Name {
get
;
set
; }
}

  

 4 备注:Dictionary的扩展方法使用

 

/// <summary>
/// Dictionary的扩展方法使用
/// </summary>
 
public 
static 
void 
DicSample4()
 
{
     
//1)普通调用
     
Dictionary<
int
, String> dict =
new 
Dictionary<
int
, String>();
     
DictionaryExtensionMethodClass.TryAdd(dict, 1,
"ZhangSan"
);
     
DictionaryExtensionMethodClass.TryAdd(dict, 2,
"WangWu"
);
     
DictionaryExtensionMethodClass.AddOrPeplace(dict, 3,
"WangWu"
);
     
DictionaryExtensionMethodClass.AddOrPeplace(dict, 3,
"ZhangWu"
);
     
DictionaryExtensionMethodClass.TryAdd(dict, 2,
"LiSi"
);
 
     
//2)TryAdd 和 AddOrReplace 这两个方法具有较强自我描述能力,用起来很省心,而且也简单:
     
dict.AddOrPeplace(20,
"Orange"
);
     
dict.TryAdd(21,
"Banana"
);
     
dict.TryAdd(22,
"apple"
);
 
     
//3)像Linq或jQuery一样连起来写  
     
dict.TryAdd(10,
"Bob"
)
         
.TryAdd(11,
"Tom"
)
         
.AddOrPeplace(12,
"Jom"
);
 
     
//4) 获取值
     
String F =
"Ba"
;
     
dict.TryGetValue(31,
out 
F);
     
Console.WriteLine(
"F : {0}"
,F);
 
     
foreach 
(
var 
dic
in 
dict)
     
{
         
Console.WriteLine(
"Output : Key : {0}, Value : {1}"
, dic.Key, dic.Value);
     
}
     
//5)下面是使用GetValue获取值
     
var 
v1 = dict.GetValue(111,
null
);
     
var 
v2 = dict.GetValue(10,
"abc"
);
 
     
//6)批量添加
     
var 
dict1 =
new 
Dictionary<
int
,
int
>();
     
dict1.AddOrPeplace(3, 3);
     
dict1.AddOrPeplace(5, 5);
 
     
var 
dict2 =
new 
Dictionary<
int
,
int
>();
     
dict2.AddOrPeplace(1, 1);
     
dict2.AddOrPeplace(4, 4);
     
dict2.AddRange(dict1,
false
);
 
}

  扩展方法所在的类

public 
static 
class 
DictionaryExtensionMethodClass
{
    
/// <summary>
    
/// 尝试将键和值添加到字典中:如果不存在,才添加;存在,不添加也不抛导常
    
/// </summary>
    
public 
static 
Dictionary<TKey, TValue> TryAdd<TKey, TValue>(
this 
Dictionary<TKey, TValue> dict, TKey key, TValue value)
    
{
        
if 
(dict.ContainsKey(key) ==
false
)
            
dict.Add(key, value);
        
return 
dict;
    
}
 
    
/// <summary>
    
/// 将键和值添加或替换到字典中:如果不存在,则添加;存在,则替换
    
/// </summary>
    
public 
static 
Dictionary<TKey, TValue> AddOrPeplace<TKey, TValue>(
this 
Dictionary<TKey, TValue> dict, TKey key, TValue value)
    
{
        
dict[key] = value;
        
return 
dict;
    
}
 
    
/// <summary>
    
/// 获取与指定的键相关联的值,如果没有则返回输入的默认值
    
/// </summary>
    
public 
static 
TValue GetValue<TKey, TValue>(
this 
Dictionary<TKey, TValue> dict, TKey key, TValue defaultValue)
    
{
        
return 
dict.ContainsKey(key)?dict[key] : defaultValue;
    
}
 
    
/// <summary>
    
/// 向字典中批量添加键值对
    
/// </summary>
    
/// <param name="replaceExisted">如果已存在,是否替换</param>
    
public 
static 
Dictionary<TKey, TValue> AddRange<TKey, TValue>(
this 
Dictionary<TKey, TValue> dict, IEnumerable<KeyValuePair<TKey, TValue>> values,
bool 
replaceExisted)
    
{
        
foreach 
(
var 
item
in 
values)
        
{
            
if 
(dict.ContainsKey(item.Key) ==
false 
|| replaceExisted)
                
dict[item.Key] = item.Value;
        
}
        
return 
dict;
    
}
 
 
}

台州人在杭州 IT交流群 416194041

欢迎在杭州的台州老乡加入交流!

 

 

 

 

 

本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2011/12/09/2282574.html,如需转载请自行联系原作者

你可能感兴趣的文章
设置Linux内核参数 /etc/sysctl.conf
查看>>
超简单jquery tab切换
查看>>
Nagios(五)——配置PNP图表分析
查看>>
系统集成项目管理工程师真题模拟上午题(3套)
查看>>
pnp4nagios的安装配置
查看>>
OrbitDB-Peer 2 Peer Database using CRDTs
查看>>
全屏状态下层级问题(z-index)
查看>>
Using a SecureCRT 链接远程主机
查看>>
python写的好的博客链接
查看>>
linux shell wait process finished,等待线程执行结束
查看>>
MySQL内存表的特性与使用介绍
查看>>
男人帮,帮男人找爱情
查看>>
linux添加HIVE环境变量
查看>>
Secure Delivery Center快速入门指南(二):交付软件包
查看>>
MyEclipse Spring开发教程:使用基本的Spring功能(三)
查看>>
算法训练 未名湖边的烦恼
查看>>
数据库的备份和恢复
查看>>
2019假期作业(一)
查看>>
1.登陆一下好吗??
查看>>
java集合
查看>>