当前位置: 首页 > article >正文

C# 字典应用

using System;

using System.Collections.Generic;

 

class Program

{

    static void Main()

    {

        // 创建一个字典,键是字符串类型,值是整数类型

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

 

        // 向字典中添加键值对

        // 原理:字典使用哈希表实现,键通过哈希函数转换为哈希码,用于快速查找

        studentScores.Add("Alice", 85);

        studentScores.Add("Bob", 92);

        studentScores.Add("Charlie", 78);

 

        // 访问字典中的值

        // 原理:通过键的哈希码找到对应的桶,然后在桶中线性查找匹配的键

        Console.WriteLine($"Alice's score is {studentScores["Alice"]}");

 

        // 修改字典中的值

        // 原理:通过键找到对应的值,然后更新值

        studentScores["Alice"] = 88;

        Console.WriteLine($"Updated Alice's score to {studentScores["Alice"]}");

 

        // 检查字典中是否包含某个键

        // 原理:通过键的哈希码找到对应的桶,然后在桶中线性查找匹配的键,返回布尔值

        if (studentScores.ContainsKey("Bob"))

        {

            Console.WriteLine("Bob's score is in the dictionary.");

        }

 

        // 遍历字典中的所有键值对

        // 原理:遍历字典的内部结构(通常是数组或链表数组),依次访问每个键值对

        Console.WriteLine("All student scores:");

        foreach (KeyValuePair<string, int> entry in studentScores)

        {

            Console.WriteLine($"Student: {entry.Key}, Score: {entry.Value}");

        }

 

        // 尝试移除字典中的某个键值对

        // 原理:通过键找到对应的桶和项,然后从字典中删除该项

        studentScores.Remove("Charlie");

 

        // 检查并处理字典中不存在的键

        // 原理:通过键的哈希码找到对应的桶,然后在桶中线性查找匹配的键,如果找不到则抛出异常

        try

        {

            Console.WriteLine($"David's score is {studentScores["David"]}");

        }

        catch (KeyNotFoundException)

        {

            Console.WriteLine("David's score is not in the dictionary.");

        }

 

        // 获取字典中键的集合和值的集合

        // 原理:字典维护了两个集合,一个用于键,一个用于值,直接返回这些集合的视图

        Console.WriteLine("Keys in the dictionary:");

        foreach (string key in studentScores.Keys)

        {

            Console.WriteLine(key);

        }

 

        Console.WriteLine("Values in the dictionary:");

        foreach (int value in studentScores.Values)

        {

            Console.WriteLine(value);

        }

    }

}

 

 

案例应用:

 

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // 创建一个字符串数组,模拟班级中的名字列表
        string[] names = { "Alice", "Bob", "Alice", "Charlie", "Bob", "David", "Alice" };

        // 创建一个字典,用于存储名字和对应的出现次数
        // 键(Key)是名字,值(Value)是该名字出现的次数
        Dictionary<string, int> nameCounts = new Dictionary<string, int>();

        // 遍历名字数组
        foreach (string name in names)
        {
            // 检查字典中是否已包含当前名字
            if (nameCounts.ContainsKey(name))
            {
                // 如果包含,则将当前名字对应的值(出现次数)加1
                nameCounts[name]++;
            }
            else
            {
                // 如果不包含,则将当前名字添加到字典中,并将值(出现次数)设置为1
                nameCounts[name] = 1;
            }
        }

        // 遍历字典,输出每个名字及其出现的次数
        foreach (KeyValuePair<string, int> entry in nameCounts)
        {
            Console.WriteLine($"{entry.Key}: {entry.Value}");
        }
    }
}

 

另外,如果字典中可能有多个键对应相同的值,并且你需要找到所有这些键,那么你需要遍历整个字典并收集所有匹配的键。这可以通过使用 List<T> 或其他集合类型来实现。

List<string> keysFound = nameCounts.Where(kvp => kvp.Value == valueToFind).Select(kvp => kvp.Key).ToList();

if (keysFound.Any())
{
    Console.WriteLine($"Found keys for value {valueToFind}: {string.Join(", ", keysFound)}");
}
else
{
    Console.WriteLine($"No keys found for value {valueToFind}.");
}


http://www.kler.cn/a/391639.html

相关文章:

  • 边缘计算在智能交通系统中的应用
  • 【初阶数据结构与算法】链表刷题之移除链表元素、反转链表、找中间节点、合并有序链表、链表的回文结构
  • 机器学习day3-KNN算法、模型调优与选择
  • JavaScript高级程序设计基础(四)
  • 2024 年 8 个最佳 API 设计工具图文介绍
  • 《EasyQuotation 与MongoDB在股市信息的奇妙融合》
  • CTF-RE 从0到N: windows反调试-获取Process Environment Block(PEB)信息来检测调试
  • 时间序列数据结构、持久数据结构详细解读
  • DHCP与FTP
  • 【设计模式】行为型模式(一):模板方法模式、观察者模式
  • 番外篇 | 关于YOLO11算法的改进点总结
  • 计算机毕业设计Python+大模型动漫推荐系统 动漫视频推荐系统 机器学习 协同过滤推荐算法 bilibili动漫爬虫 数据可视化 数据分析 大数据毕业设计
  • Pytorch实现运动鞋识别
  • KPI绩效系统源码,java版医院绩效核算系统源码,科室绩效考核、奖金核算、审核、发放一体化
  • GIS前后端分离项目展示
  • 电商系统开发:Spring Boot框架的实践
  • Day09 C++ 存储类
  • ubuntu2204部署RAGFlow(非docker)
  • HTTP vs. HTTPS:从基础到安全的全面对比
  • Hadoop + Hive + Apache Ranger 源码编译记录
  • MySql--增删改查表设计总结
  • 区块链技术在供应链管理中的应用
  • LLMs:MindFormers的简介、安装和使用方法、案例应用
  • @RestController 源码解读:解决 Web 开发中 REST 服务的疑难杂症
  • Hbase入门
  • 树莓派安装FreeSWITCH