C#关于NameValueCollection,Dictionary,List Tuple比较
我们在开发项目,根据实际需要,选择最适合的集合数据类型。
NameValueCollection、Dictionary<string,string>,List<Tuple<string,string>>三个类都可以表示键值对集合。
但根据使用场景的不同,建议选择不同的类型来进行相应的处理。
NameValueCollection用于键名不区分大小写,比如读取(或写入)ini文件,键名是不区分大小写的。nvc[键名]不存在将返回null,并不抛出异常。
Dictionary<string,string>用于键名必须唯一的,而且对重复键增加元素将提示异常。dict[键]如果不存在将抛出异常。
System.Collection.Speic.NameValueCollection 键Key不区分大小写。每一个键可以对应多个值【一个键对应一个字符串数组】
增加相同的键,不抛出异常,只是增加该键对应的值的数组个数+1
System.Dictionay<string,string> 键key区分大小写。dict.Add()如果键名重复,将抛出异常。dict读取不存在的键,将抛出异常。
System.List<Tuple<string,string>> 元组,键和值都可以重复。每个元组元素都是独立的。
表格如下:
类 | 键区分大小写 | Add()键名相同 | 索引器 | 读取的键不存在 |
---|---|---|---|---|
NameValueCollection | False | 允许 | 整体更新键对应的值 | 不抛出异常,返回null |
Dictionary<string,string> | True | 不允许 | 整体更新键对应的值 | 抛出异常 |
List<Tuple<string,string>> | True | 允许 | 无 | 无 |
以下为测试程序。
新建.net core 3.1控制台应用程序SpecialCollectionDemo,测试代码如下:
using System;
using System.Collections.Specialized;
using System.Collections.Generic;
using System.Linq;
namespace SpecialCollectionDemo
{
class Program
{
/// <summary>
/// 声明一个测试委托
/// </summary>
static Action action;
static void Main(string[] args)
{
action = TestNameValueCollection;
action();
action = TestListTuple;
action();
action = TestDictionary;
action.Invoke();
Console.ReadLine();
}
/// <summary>
/// 测试NameValueCollection
/// </summary>
static void TestNameValueCollection()
{
Console.WriteLine("NameValueCollection的键名不区分大小写,Add函数当键相同时,只是增加对应的值的数组增加一个元素...");
NameValueCollection nvc = new NameValueCollection();
nvc.Add("ABC", "景天");
nvc.Add("abc", "重楼");
nvc.Add("123", "雪见");
Console.WriteLine($"测试索引器:{nvc["ABC"]}");
Console.WriteLine($"测试Get函数:{nvc.Get("aBc")}");
string[] values = nvc.GetValues("abc");
Console.WriteLine($"测试GetValues函数:{string.Join(",", values)}");
Console.WriteLine("NameValueCollection当键不存在时,返回null");
string testNull = nvc["hello"];
Console.WriteLine($"NameValueCollection不存在的键hello,对应的值是否为null:{testNull == null}");
}
/// <summary>
/// 测试元组集合
/// </summary>
static void TestListTuple()
{
Console.WriteLine("测试List<Tuple<string, string>>...");
List<Tuple<string, string>> list = new List<Tuple<string, string>>();
list.Add(Tuple.Create("ABC", "紫萱"));
list.Add(new Tuple<string, string>("abc", "长卿"));
list.Add(Tuple.Create("123", "龙葵"));
list.Add(Tuple.Create("ABC", "清微"));
list.ForEach(tuple => Console.WriteLine($"Name:{tuple.Item1},Value:{tuple.Item2}"));
}
/// <summary>
/// 测试字典Dictionary
/// </summary>
static void TestDictionary()
{
Console.WriteLine("测试Dictionary<string, string>...");
Console.WriteLine("字典Dictionary区分大小写,如果使用Add函数增加相同的键时,将抛出异常");
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("ABC", "张三");
dict.Add("abc", "李四");
dict["ABC"] = "石碏";//重新设置值
dict.Add("hello", "world");
dict["Test"] = "success";
for (int i = 0; i < dict.Count; i++)
{
KeyValuePair<string,string> keyValuePair =dict.ElementAt(i);
Console.WriteLine($"key:{keyValuePair.Key},value:{keyValuePair.Value}");
}
try
{
Console.WriteLine("测试增加相同的键...");
dict.Add("ABC", "州吁");
}
catch (Exception ex)
{
Console.WriteLine($"增加相同的键_出现异常:{ex.Message}");
}
try
{
Console.WriteLine("尝试读取不存在的键key");
string testValue = dict["NotExists"];
Console.WriteLine(testValue);
}
catch (Exception ex)
{
Console.WriteLine($"读取不存在的键_出现异常:{ex.Message}");
}
}
}
}
程序运行效果如图:
C#关于NameValueCollection,Dictionary,List Tuple比较相关推荐
- 巧用Dictionary实现日志数据批量插入
背景 最近再做一个需求,就是对站点的一些事件进行埋点,说白了就是记录用户的访问行为.那么这些数据怎么保存呢,人家点一下保存一下?显然不合适,肯定是需要批量保存,提高效率. 问题窥探 首先,我想到的是D ...
- 基础才是重中之重~DictionaryK,V里V的设计决定的性能
回到目录 字典对象Dictionary<K,V>我们经常会用到,而在大数据环境下,字典使用不当可能引起性能问题,严重的可能引起内在的溢出! 字典的值建议为简单类型,反正使用Tuple< ...
- Python Numpy学习手册(翻译自斯坦福大学 CS231n: Convolutional Neural Networks for Visual Recognition)
1.Python简介 Python是一种高级的动态类型化多范例编程语言,也类似伪代码,举个例子,对数据排序 def quicksort(arr):if len(arr) <= 1:return ...
- edittext禁止换行符但能自动换行简书_使用n-gram创建自动完成系统
n-gram语言模型用于就是计算句子的概率,通俗来讲就是判断这句话是人话的可能性有多少.n就是将句子做切割,n个单词为一组. 如何计算句子的概率?根据条件概率和链式规则 P(B|A)=P(A,B)/P ...
- python numpy官网_Python Numpy 教程(上)
------------------------------------------------------------------------------------------------ 该教程 ...
- Python Numpy 教程(使用 Jupyter 和 Colab)
Colab 笔记本 本教程最初由Justin Johnson提供. 我们将在本课程的所有作业中使用 Python 编程语言.Python 本身就是一种出色的通用编程语言,但在一些流行的库(numpy. ...
- A02_Python(基本数据类型,容器,函数,类),Numpy(数组array,数组索引,数据类型,数组中的数学,广播)
Python的版本 基本数据类型 与大多数语言一样,Python有许多基本类型,包括整数,浮点数,布尔值和字符串.这些数据类型的行为方式与其他编程语言相似. Numbers(数字类型):代表的是整数和 ...
- python对json的操作总结
Json简介:Json,全名 JavaScript Object Notation,是一种轻量级的数据交换格式.Json最广泛的应用是作为AJAX中web服务器和客户端的通讯的数据格式.现在也常用于h ...
- Serilog 最佳实践
Serilog 最佳实践 概述 Serilog[1]是 Microsoft .NET 的结构化日志记录库,并已成为Checkout.com 上NET 的首选日志记录库.它支持各种日志记录目的地(称为接 ...
最新文章
- 这款工具,1分钟定位性能瓶颈,我老板都说好!
- 算法打卡39:喷水装置
- 一个稍微复杂的VTK程序
- T-SQL远程数据库备份还原
- JVM运行时内存分区
- 26. GD32F103C8T6入门教程-CAN外设回环测试
- Android中SlidingDrawer介绍【安卓进化三十四】
- VS C#/C++ 工具箱显示出来 工具箱不见了
- 前端-CSS,语法、元素、属性、动画、计算方法布局及简单实战项目
- vue项目强制清除页面缓存
- 软件测试常用的性能测试指标,7个常用的网络性能测试指标
- python数字图像处理以及绘图
- 电脑系统怎么重装win11
- 机器学习:分类模型大全
- 自学JavaScript第一天- JS 基础
- android的dispatchTouchEvent onInterceptTouchEvent onTouchEvent
- 运维实践 | 使用K3S之快速搭建精简版本K8S集群环境,助力开发测试环境!
- 2020年全球滤波器行业现状及竞争格局分析,市场高度集中「图」
- 多线程算法题:国王、毒酒、侍卫
- ubuntu 安装后硬盘温度较高解决办法
热门文章
- 大番茄插件 常用配置
- “地图易”数据采集工具介绍——地图数据采集神器
- 电脑端上面完成转换的CAD转DWF格式如何进行分享?
- 十一个顶级的Git 客户端,绝对很实用!
- SQL日志文件太大,清理方法
- BurpSuite武器库打造之环境搭建和API介绍(上)
- layui数据表格接口_layui数据表格实现重载数据表格功能(搜索功能)
- Java用awt编写计算器(只有加减乘除)
- mysql生成(月初、月末、上中下旬判断、年初、年末、季初、季末)创建日期维度表所需字段内容、函数、及说明
- 天梯赛练习集 L2-028 秀恩爱分得快(25分)数据储存与处理 含测试点解析