首页 > 编程语言 >C# 字典应用

C# 字典应用

时间:2024-11-12 15:46:53浏览次数:3  
标签:Console 应用 C# 哈希 Alice studentScores WriteLine 字典

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}.");
}

标签:Console,应用,C#,哈希,Alice,studentScores,WriteLine,字典
From: https://blog.csdn.net/yongshiqq/article/details/143716087

相关文章

  • 匿名内部类、Lambda表达式 应用于创建线程
    匿名内部类的几大作用:1.完成接口实现关系 / 完成类继承关系2.方法重写3.创建对象而Lambda表达式的作用:主要用于实现函数式接口,即用于实现单一抽象方法接口。所以可以用Lambda表达式实现的函数式接口都可以转换成匿名内部类的形式。方式一Threadt=newThread(){/......
  • C++语法·三
    内联函数(inline)简介:用inline修饰的函数叫内联函数,编译时C++编译器会在调用的地方站开内联函数,这样调用函数就不需要创建栈帧了,可以提高效率。内联函数与宏函数:C++中的内联函数与C中的宏函数很相似,都是直接在预处理时展开函数,将函数直接替换到调用位置,不额外创建栈帧。但内联......
  • 初识C语言2
    选择语句如果你好好学习,校招时拿到一个好offer,走上人生巅峰。如果你不学习,毕业等于失业,回家卖红薯。这就是选择!循环语句有些事必须一直做,比如写csdn,比如大家每天都要吃饭、喝水三种循环语句:while语句,for语句,do-while语句(我后面写csdn会详细讲)函数函数的特点就是简......
  • 分支语句(if ,switch)
    分支语句ifswitch1.什么是控制语句?控制语句:用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,c语言有九种控制语句。可以分成三类:1.条件判断语句也叫分支语句:if语句、switch语句;2.循环执行语句:dowhile语句、while语句、for语句;3.转向语句:bre......
  • CF1006
    前言失而复得最开心力!!!这场AK力(可能是因为第一条)题目难度:红黄黄绿绿蓝正文A偶数-1,奇数不变B直接排个序,取前K大的就行C直接用双指针扫一遍即可D发现上下对面四个是绑定的,所以只需让上下左右四个有两对一样的即可E发现(由树剖得)一颗子树的dfn序是连续的于是就记一下d......
  • 2.基本的SELECT语句
    #列出数据库showdatabases;#创建数据库createdatabasedbtest;1.SQL分类DDL:数据定义语言CREATE、DROP、ALTER、RENAME、TRUNCATEDML*:数据操作语言INSERT、DELETE、UPDATE、SELECTDCL:数据控制语言GRANT、REVOKE、ROLLBACK、COMMIT、SAVEPOINT2.导入数据方式一:基......
  • docker总结
    ‌Docker‌是一个开源的应用容器引擎,它允许开发者将应用及其依赖打包进一个可移植的容器镜像中,然后在任何流行的Linux或Windows操作系统上发布和运行。Docker通过将系统的所有文件封装成一个镜像,使得每个容器都有独立的操作系统环境,从而解决了应用部署中的环境差异和依赖问题‌。......
  • 解锁视觉-文本双编码:CLIP类似模型的多GPU训练
    UnlockingVision-TextDual-Encoding:Multi-GPUTrainingofaCLIP-LikeModelROCmBlogs2024年4月24日,由SeanSong撰写。在本博客中,我们将构建一个类似CLIP的视觉-文本双编码器模型,并在AMDGPU上使用ROCm对其进行微调,使用COCO数据集。这项工作受到CLIP原理和HuggingF......
  • 网络安全从零开始学习CTF——CTF基本概念
    这一系列把自己学习的CTF的过程详细写出来,方便大家学习时可以参考。一、CTF简介01」简介中文一般译作夺旗赛(对大部分新手也可以叫签到赛),在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互......
  • 网络安全与CTF学习信息汇总
    http://www.sec-wiki.com/skill/安全技能(里面渗透逆向编程都有介绍)http://blog.knownsec.com/Knownsec_RD_Checklist/知道创宇研发技能表v3.0**********************************************************综合学习平台:http://edu.gooann.com/谷安网校http://www.jike......