Dictionary<k,v>键值对的使用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Dictionary键值对
{
class Program
{
static void Main(string[] args)
{
DicSample1();
DicSample2();
DicSample3();
DicSample4();
Console.Read();
}
//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);
}
}
//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);
}
}
//Student类:
public class Student
{
public String Num { get; set; }
public String Name { get; set; }
}
//扩展方法所在的类
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;
}
}
}
Dictionary<k,v>键值对的使用的更多相关文章
- C#基础精华03(常用类库StringBuilder,List<T>泛型集合,Dictionary<K , V> 键值对集合,装箱拆箱)
常用类库StringBuilder StringBuilder高效的字符串操作 当大量进行字符串操作的时候,比如,很多次的字符串的拼接操作. String 对象是不可变的. 每次使用 System. ...
- 10集合:List<T>,Dictionary<K,V>
List<T>泛型集合 List<T>是C#中一种快捷.易于使用的泛型集合类型,使用泛型编程为编写面向对象程序增加了极大的效率和灵活性. 1.List<T>用法 ...
- 键值对集合Dictionary<K,V>根据索引提取数据
Dictionary<K,V>中ToList方法返回 List<KeyValuePair<K,V>>定义可设置检索的键/值对
- C#泛型集合之Dictionary<k, v>使用技巧
1.要使用Dictionary集合,需要导入C#泛型命名空间 System.Collections.Generic(程序集:mscorlib) 2.描述 1).从一组键(Key)到一组值(Value) ...
- C#泛型集合—Dictionary<K,V>使用技巧
转载:http://blog.csdn.net/a125138/article/details/7742022 1.要使用Dictionary集合,需要导入C#泛型命名空间 System.Collec ...
- 泛型集合List<T> Dictionary<K,V>
List<T>类似于ArrayList,ArrayList的升级版. 各种方法:Sort().Max().Min().Sum()… Dictionary<K,V>类似于Ha ...
- 转载C#泛型集合—Dictionary<K,V>使用技巧
1.要使用Dictionary集合,需要导入C#泛型命名空间 System.Collections.Generic(程序集:mscorlib) 2.描述 1).从一组键(Key)到一组值(Value) ...
- 基础才是重中之重~Dictionary<K,V>里V的设计决定的性能
回到目录 字典对象Dictionary<K,V>我们经常会用到,而在大数据环境下,字典使用不当可能引起性能问题,严重的可能引起内在的溢出! 字典的值建议为简单类型,反正使用Tuple< ...
- 随笔4 Dictionary<K,V>
本来说是想介绍一下Hashtable的,但是发现HashMap和Hashtable最开始的不同就是在于HashMap继承了AbstractMap,而Hashtable继承了Dictionary< ...
随机推荐
- Introduction to Big Real Mode
转自Merck Hung merck@olux.org, 洪豪謙 应朋友的要求, 希望我花一点时间整理一下 x86 Big Real Mode 的文章.另外也发现, 身边似乎有一些朋友也准备要开始从事 ...
- cocopods 安装与使用
iOS 最新版 CocoaPods 的安装流程 1.移除现有Ruby默认源 $gem sources --remove https://rubygems.org/ 2.使用新的源 $gem sourc ...
- MiniUI中DataGrid数据的载入
本文将介绍一下,在ASP.NET MVC环境下,如何用Jquery MiniUI中的Datagrid控件载入数据. 1.效果展示: 2.具体步骤: 1> 既然是在MVC里,那我们的界面自然选择 ...
- 上海有线通下载exe会302转发请求
起因: 做的软件用的clickonce,在公网的clickonce下载exe时一直报错,在vpn环境下没问题.错误提示如下: + HTTP redirect is not allowed for ap ...
- If you only do what you can do you'll never be more than you are now.
If you only do what you can do you'll never be more than you are now. 如果你只是做你力所能及的事,你将不会有所进步:
- plsql连接本地数据库
1. 下载64位Oracle,解压两文件,解压完成后将文件合并,安装: 2. 下载PL/SQL,安装: 3. 下载instantclient-basic-win32-11.2.0.1.0.zip ...
- Sublime3 快捷键
Sublime3 快捷键 blog 选择类 Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.举个栗子: ...
- WebStorm 11、PhpStorm 10免费激活(不需要注册码)
之前分享的WebStorm9.WebStrom10.PhpStorm9注册码生成网站已经被站长关了,比较遗憾!http://my.oschina.net/ximidao/blog/486353 现在官 ...
- iOS runtime实用篇解决常见Crash
程序崩溃经历 其实在很早之前就想写这篇文章了,一直拖到现在. 程序崩溃经历1 平时开发测试的时候好好的,结果上线几天发现有崩溃的问题,其实责任大部分在我身上. 我的责任: 过分信赖文档,没进行容错处理 ...
- HDFS体系架构
Master-slaver结构,namenode是中心服务器维护着文件系统树和整个树内的文件目录, 负责整个数据集群的管理.datanode分布在不同的机架上,在客户端和namenode的调度下 存储 ...