C#学习相关系列之数据类型---Diactionary字典的用法

简介: C#学习相关系列之数据类型---Diactionary字典的用法

一、字典的简介和常用方法

      在C#中,Dictionary<TKey, TValue>是一种非常常用的泛型集合类,用于存储键值对(Key-Value Pair)的数据结构。Dictionary<TKey, TValue>可以根据键快速查找对应的值,因此在需要快速查找和检索数据的场景下,特别是在涉及大量数据时,使用字典是非常高效的选择。本文将详细介绍Dictionary<TKey, TValue>的应用,包括创建字典、添加元素、访问元素、删除元素、遍历字典、常用的方法等内容。

常用方法:

Comparer:           获取用于确定字典中的键是否相等的 IEqualityComparer
  Count:                  获取包含在 Dictionary中的键/值对的数目。
  Item:                    获取或设置与指定的键相关联的值。
  Keys:                   获取包含 Dictionary中的键的集合。
  Values:                获取包含 Dictionary中的值的集合。
  Add:                    将指定的键和值添加到字典中。
  Clear:                  从 Dictionary中移除所有的键和值。
  ContainsKey:      确定 Dictionary是否包含指定的键。
  ContainsValue:   确定 Dictionary是否包含特定值。             
  GetEnumerator:  返回循环访问 Dictionary的枚举数。
  GetType:             获取当前实例的 Type。 (从 Object 继承。)
  Remove:             从 Dictionary中移除所指定的键的值。
  ToString:             返回表示当前 Object的 String。 (从 Object 继承。)
  TryGetValue:      获取与指定的键相关联的值。

二、主要方法方法简介

1、排序orderby

排序主要为正序orderby和反序OrderByDescending,二者用法相同

public static Dictionary<int, string> dic = new Dictionary<int, string>();  
        static void Main(string[] args)
        {
            dic.Add(1,"a");
            dic.Add(3, "c");
            dic.Add(6, "b");
            dic.Add(2, "f");
            第一种方法:
            var tt = dic.OrderBy(x => x.Value);
            //orderby后面跟要排序的依据x为字典,通过x的value进行正向排序
            第二种方法:
           // var tt = from s in dic orderby s.Value descending select s;
            foreach (var item in tt)
            {
                Console.WriteLine(item.Key+"  "+item.Value);
            }

dictionary的排序主要用orderby方法,具体可以参考linq中orderby的用法。

2、对Dictionary求交集Intersect、差集Except、并集Union并集

Dictionary<int, int> Dic1 = new Dictionary<int, int>();
for (int i = 0; i < 10; i++)
{
  Dic1.Add(i, i);
}
 
Dictionary<int, int> Dic2 = new Dictionary<int, int>();
for (int i = 5; i < 15; i++)
{
  Dic2.Add(i, i);
}
 
//求交集
 
var jj = Dic1.Keys.Intersect(Dic2.Keys);
foreach (var i in jj)
{
   Console.Write(i + " ");
}
 
//求差集
var cj = Dic1.Keys.Except(Dic2.Keys);
 
foreach (var i in cj)
{
   Console.Write(i + " ");
}
 
//求并集
var bj = Dic1.Keys.Union(Dic2.Keys);
 
foreach (var i in bj)
{
   Console.Write(i + " ");
}

3、通过值查找键

Dictionary<string, int> dict = new Dictionary<string, int>();
dict.Add("apple", 1);
dict.Add("banana", 2);
dict.Add("orange", 3);
string key = dict.FirstOrDefault(x => x.Value == 2).Key;
//FirstOrDefault中跟的是判断条件
Console.WriteLine(key); // 输出 "banana"

4.判断两个字典是否相等

bool Equals(Dictionary<string, int> dict1, Dictionary<string, int> dict2)
        {
            var dict3 = dict2.Where(x => !dict1.ContainsKey(x.Key) || dict1[x.Key] != x.Value)
                             .Union(dict1.Where(x => !dict2.ContainsKey(x.Key) || dict2[x.Key] != x.Value))
                             .ToDictionary(x => x.Key, x => x.Value);
            return dict3.Count == 0;
        }


相关文章
|
4天前
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
|
2月前
|
存储 C# 索引
C# 一分钟浅谈:变量与数据类型简介
【9月更文挑战第1天】在 C# 编程中,了解变量与数据类型至关重要。本文详细介绍了 C# 中的值类型(如整数、浮点数、布尔值等)和引用类型(如类、接口、数组、字符串)。通过示例代码展示了变量的声明与使用方法,并针对数据类型转换错误、变量未初始化及数值溢出等常见问题提供了解决方案。正确选择数据类型不仅能提升程序性能,还可避免潜在错误,有助于编写高质量代码。
129 47
|
1月前
|
开发框架 缓存 算法
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
|
2月前
|
Linux C# 开发者
Uno Platform 驱动的跨平台应用开发:从零开始的全方位资源指南与定制化学习路径规划,助您轻松上手并精通 C# 与 XAML 编程技巧,打造高效多端一致用户体验的移动与桌面应用程序
【9月更文挑战第8天】Uno Platform 的社区资源与学习路径推荐旨在为初学者和开发者提供全面指南,涵盖官方文档、GitHub 仓库及社区支持,助您掌握使用 C# 和 XAML 创建跨平台原生 UI 的技能。从官网入门教程到进阶技巧,再到活跃社区如 Discord,本指南带领您逐步深入了解 Uno Platform,并提供实用示例代码,帮助您在 Windows、iOS、Android、macOS、Linux 和 WebAssembly 等平台上高效开发。建议先熟悉 C# 和 XAML 基础,然后实践官方教程,研究 GitHub 示例项目,并积极参与社区讨论,不断提升技能。
91 2
|
3月前
|
Java C#
C# 和 java 基本数据类型
C# 和 java 基本数据类型
22 0
|
3月前
|
开发框架 .NET API
C#/.NET/.NET Core推荐学习书籍(24年8月更新)
C#/.NET/.NET Core推荐学习书籍(24年8月更新)
|
5月前
|
存储 C# 开发者
C# 编程基础:注释、变量、常量、数据类型和自定义类型
C# 编程基础:注释、变量、常量、数据类型和自定义类型
|
4月前
|
Dart 算法 JavaScript
C#数据结构与算法入门教程,值得收藏学习!
C#数据结构与算法入门教程,值得收藏学习!
|
6月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
192 3
|
14天前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
29 3