【C# 基础精讲】字典(Dictionary)的使用

这篇具有很好参考价值的文章主要介绍了【C# 基础精讲】字典(Dictionary)的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

c# dictionary,C# 基础精讲,c#,数据库,服务器,原力计划

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

1. 创建字典

要使用Dictionary<TKey, TValue>,同样需要引入System.Collections.Generic命名空间。在创建字典时,需要指定键和值的类型,例如,如果我们希望以字符串作为键,以整数作为值,则创建一个Dictionary<string, int>类型的字典。

using System.Collections.Generic;

// 创建一个以字符串作为键,以整数作为值的字典
Dictionary<string, int> ageDict = new Dictionary<string, int>();

在上述代码中,我们创建了一个Dictionary<string, int>类型的字典ageDict,用于存储人名和年龄的对应关系。

2. 添加元素

可以使用Add()方法向字典中添加键值对。如果键已经存在于字典中,则Add()方法将会抛出异常。如果我们希望键可以重复,则可以使用索引符号[]直接给字典赋值,这样如果键已经存在,则会更新对应的值。

// 添加键值对到字典中
ageDict.Add("Alice", 25);
ageDict.Add("Bob", 30);
ageDict.Add("Charlie", 22);

// 直接赋值给字典,如果键已存在,则更新对应的值
ageDict["Alice"] = 26;

在上述代码中,我们向ageDict字典中添加了三个键值对,然后通过ageDict["Alice"] = 26将键"Alice"对应的值从25更新为26。

3. 访问元素

可以通过键访问字典中的值。使用索引符号[]和键来获取对应的值。如果字典中不存在该键,则会抛出异常。为了避免抛出异常,可以使用TryGetValue()方法。

// 通过键访问字典中的值
int aliceAge = ageDict["Alice"]; // 获取"Alice"对应的值,此处为26

// 使用 TryGetValue() 避免抛出异常
if (ageDict.TryGetValue("Bob", out int bobAge))
{
    Console.WriteLine($"Bob's age: {bobAge}"); // 输出"Bob's age: 30"
}
else
{
    Console.WriteLine("Bob's age not found.");
}

在上述代码中,我们通过ageDict["Alice"]获取键"Alice"对应的值,并使用TryGetValue()方法获取键"Bob"对应的值。如果键"Bob"存在,则将对应的值赋给变量bobAge,否则输出"Bob’s age not found."。

4. 删除元素

可以使用Remove()方法根据键从字典中删除元素。

// 删除字典中的键值对
ageDict.Remove("Charlie");

在上述代码中,我们使用Remove()方法从ageDict字典中删除了键"Charlie"对应的键值对。

5. 遍历字典

可以使用foreach循环遍历字典中的所有键值对,或者分别遍历键和值。

// 遍历键值对
foreach (var kvp in ageDict)
{
    Console.WriteLine($"{kvp.Key}: {kvp.Value}");
}

// 遍历键
foreach (var key in ageDict.Keys)
{
    Console.WriteLine(key);
}

// 遍历值
foreach (var value in ageDict.Values)
{
    Console.WriteLine(value);
}

在上述代码中,我们使用foreach循环遍历了ageDict字典中的所有键值对、所有键和所有值。

6. Dictionary<TKey, TValue>常用方法

除了上述介绍的基本操作外,Dictionary<TKey, TValue>还提供了许多其他常用的方法,方便对字典进行操作。下面列举一些常用的方法:

Count

Count属性用于获取字典中键值对的数量。

int count = ageDict.Count; // 获取键值对的数量,此处为2

在上述代码中,count将会被赋值为2,表示ageDict字典中有两个键和值的键值对。

ContainsKey和ContainsValue

ContainsKey()方法用于判断字典中是否包含指定的键,返回一个布尔值。ContainsValue()方法用于判断字典中是否包含指定的值,返回一个布尔值。

bool hasAlice = ageDict.ContainsKey("Alice"); // 判断字典是否包含键"Alice"
bool hasAge30 = ageDict.ContainsValue(30); // 判断字典是否包含值为30的元素

在上述代码中,hasAlice将会被赋值为true,因为ageDict字典中包含键"Alice"。而hasAge30将会被赋值为false,因为ageDict字典中的值为2622,没有值为30的元素。

Clear

Clear()方法用于清空整个字典,即删除所有键值对。

ageDict.Clear(); // 清空字典

在上述代码中,Clear()会将ageDict字典中的所有键值对全部删除,字典变为空。

7. 字典的应用场景

字典是一种非常实用的数据结构,适用于许多场景。以下是一些常见的应用场景:

数据索引

字典常用于数据索引,通过唯一的键来快速查找对应的值。例如,可以使用字典将学生的学号作为键,学生的姓名作为值,实现通过学号快速查找学生姓名。

Dictionary<string, string> studentNameDict = new Dictionary<string, string>();
studentNameDict.Add("2021001", "Alice");
studentNameDict.Add("2021002", "Bob");
studentNameDict.Add("2021003", "Charlie");

string name = studentNameDict["2021002"]; // 获取学号为"2021002"的学生姓名,此处为"Bob"

统计频次

字典可以用于统计一组数据中各元素出现的频次。键可以是数据元素,值可以是频次。

List<string> fruitsList = new List<string> { "apple", "orange", "banana", "apple", "orange", "apple" };
Dictionary<string, int> fruitCountDict = new Dictionary<string, int>();

foreach (var fruit in fruitsList)
{
    if (fruitCountDict.ContainsKey(fruit))
    {
        fruitCountDict[fruit]++;
    }
    else
    {
        fruitCountDict.Add(fruit, 1);
    }
}

foreach (var kvp in fruitCountDict)
{
    Console.WriteLine($"{kvp.Key}: {kvp.Value}");
}

在上述代码中,我们使用字典fruitCountDict统计了水果列表fruitsList中各个水果出现的频次,并输出了统计结果。

缓存数据

字典可以用于缓存数据,以提高数据访问的效率。在某些场景下,一些数据可能需要频繁读取,为了避免重复计算或从数据库中读取数据,可以将这些数据缓存到字典中。

Dictionary<string, int> fibCache = new Dictionary<string, int>();

int Fibonacci(int n)
{
    if (n <= 1)
    {
        return n;
    }

    if (fibCache.ContainsKey(n.ToString()))
    {
        return fibCache[n.ToString()];
    }

    int result = Fibonacci(n - 1) + Fibonacci(n - 2);
    fibCache.Add(n.ToString(), result);
    return result;
}

在上述代码中,我们实现了一个斐波那契数列的函数Fibonacci(),为了避免重复计算,我们将已经计算过的结果缓存到fibCache字典中。

8. 总结

Dictionary<TKey, TValue>是C#中非常常用的泛型集合类,用于存储键值对的数据结构。本文介绍了Dictionary<TKey, TValue>的应用,包括创建字典、添加元素、访问元素、删除元素、遍历字典以及常用的方法。字典是一种高效的数据结构,在需要快速查找和检索数据的场景下特别有用。希望通过本文的介绍,您可以更好地了解和使用Dictionary<TKey, TValue>,从而在C#编程中更加灵活和高效地处理键值对数据。祝您在C#编程中取得更大的成功!文章来源地址https://www.toymoban.com/news/detail-723757.html

到了这里,关于【C# 基础精讲】字典(Dictionary)的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python零基础超详细教程:字典(Dictionary)相关介绍使用

    前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! Python字典是另一种可变容器模型, 且可存储任意类型对象,如字符串、数字、元组等其他容器模型。 python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 一、创建字典 字典由键和对应值成对组成。字典也被称作关联数组

    2024年02月10日
    浏览(42)
  • C# Dictionary中GetEnumerator()方法

    Dictionarystring, string 中的 GetEnumerator() 方法是用于遍历字典中的键值对。它会返回一个 IEnumeratorstring 对象,该对象可以用于按照键的顺序迭代字典中的所有键值对。 具体来说, GetEnumerator() 方法会返回一个 IEnumeratorstring 对象,该对象包含了三个属性: Current :当前迭代到的键

    2024年02月12日
    浏览(37)
  • C#监听Dictionary、List的写入操作

    在开发中,对于内置值类型和string我们可以通过封装属性在 Set 中监听写入操作,但是对于 Dictionary 、 List 等就不能监听到 Add 、 Remove 等写入操作。 所以一般采取两种方式监听它们的读写操作,一种是封装操作方法,间接进行监听,第二种就是重写 Add 和 Remove 等方法。下面

    2024年01月17日
    浏览(40)
  • C#中的HashTable和Dictionary之间的区别

    HashTable和Dictionary都是用于存储数据的数据结构的类型。这两个数据结构都将存储的数据保存为键值对。

    2024年02月17日
    浏览(51)
  • C#中Dictionary与ConcurrentDictionary解锁多线程操作安全之道

      在C#中, Dictionary 是一个常见的字典类型,但它不是线程安全的。为了在多线程环境中确保安全的操作,我们可以使用 ConcurrentDictionary ,这是一个专门设计用于多线程场景的线程安全字典。 首先,我们来看一个使用普通的 Dictionary 的例子。在这个例子中,我们创建一个 D

    2024年01月22日
    浏览(43)
  • 无涯教程-Python - Dictionary(字典)

    每个键都由一个冒号(:)与其值分隔,各元素之间以逗号分隔,并且整个内容都用花括号括起来。一个没有任何元素的空字典用两个大括号书写,如:{}。 键在字典中是唯一的,而值可能不是。字典的值可以是任何类型,但是键必须是不可变的数据类型,如字符串,数字或元组。

    2024年02月11日
    浏览(35)
  • Python列表(list)、元组(tuple)和字典(dictionary)的区别

    目录 列表(list)  访问列表元素  更新和删除列表元素 元组(tuple) 元组的访问、更新、删除操作  字典(dictionary)  创建空字典 修改、删除字典 总结 列表(list)、元组(tuple)和字典(dictionary)都是序列,序列都是由索引和元素组成。遍历和访问都按照如下格式: 具

    2023年04月13日
    浏览(47)
  • Redis从入门到精通【高阶篇】之底层数据结构字典(Dictionary)详解

    上个篇章回顾,我们上个章节,讲了Redis中的快表(QuickList),它是一种特殊的数据结构,用于存储一系列的连续节点,每个节点可以是一个整数或一个字节数组。快表是Redis中的底层数据结构之一,常用于存储有序集合(Sorted Set)等数据类型的底层实现。 那么本章讲解Red

    2024年02月09日
    浏览(50)
  • 【C# 基础精讲】List 集合的使用

    在C#中, ListT 是一种非常常用的泛型集合类,用于存储一组相同类型的元素。 ListT 具有动态调整大小的能力,可以方便地添加、删除、查找和修改元素,非常灵活和高效。本文将详细介绍 ListT 集合的使用方法,包括创建 ListT 对象、添加元素、删除元素、查找元素、遍历集合

    2024年02月06日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包