首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在C#中寻找一个简单的独立持久字典实现

在C#中,一个简单的独立持久字典实现可以通过使用System.IOSystem.Runtime.Serialization.Formatters.Binary命名空间中的类来实现。以下是一个简单的示例:

代码语言:csharp
复制
using System;
using System.IO;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters.Binary;

public class PersistentDictionary<TKey, TValue> : Dictionary<TKey, TValue>
{
    private string _filePath;

    public PersistentDictionary(string filePath)
    {
        _filePath = filePath;
        if (File.Exists(filePath))
        {
            Load();
        }
    }

    public void Load()
    {
        using (FileStream fs = new FileStream(_filePath, FileMode.Open))
        {
            BinaryFormatter formatter = new BinaryFormatter();
            Dictionary<TKey, TValue> data = (Dictionary<TKey, TValue>)formatter.Deserialize(fs);
            foreach (KeyValuePair<TKey, TValue> kvp in data)
            {
                this[kvp.Key] = kvp.Value;
            }
        }
    }

    public void Save()
    {
        using (FileStream fs = new FileStream(_filePath, FileMode.Create))
        {
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(fs, this);
        }
    }
}

这个PersistentDictionary类继承自Dictionary<TKey, TValue>,并添加了LoadSave方法,用于将字典数据保存到文件中并从文件中加载数据。

使用方法如下:

代码语言:csharp
复制
var dict = new PersistentDictionary<string, int>("data.bin");
dict["apple"] = 5;
dict["banana"] = 3;
dict.Save();

在这个示例中,我们创建了一个PersistentDictionary对象,并添加了两个键值对,然后调用Save方法将字典数据保存到文件data.bin中。

下次启动程序时,我们可以使用Load方法从文件中加载数据:

代码语言:csharp
复制
var dict = new PersistentDictionary<string, int>("data.bin");
dict.Load();
foreach (var item in dict)
{
    Console.WriteLine($"{item.Key}: {item.Value}");
}

这样,我们就可以实现一个简单的独立持久字典。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

python字典统计元素出现次数简单应用

如果需要统计一段文本每个词语出现次数,需要怎么做呢? 这里就要用到字典类型了,字典构成“元素:出现次数”健值对,非常适合“统计元素次数”这样问题。...下面就用一道例题,简单学习一下: 列表 ls 存储了我国 39 所 985 高校所对应学校类型,请以这个列表为数据变量,完善 Python 代码,统计输出各类型数量。...: 1、构建一个字典 想要构成“元素:出现次数”健值对,那首先肯定就是要先生成一个字典。...喜大普奔~~~~~ 如果wordIs里接下来取到词不是“综合”,那就是重复以上步骤; 如果取到词还是“综合”,因为健值对'综合':'1'已经字典里了,所以d.get(word, 0) 结果,就不是...农林:2 民族:1 军事:1 format()使用这里就不说了,说简单简单,说复杂也有点复杂,format格式控制那些玩意儿不好整。

5.7K40
  • Golang 实现一个简单Http中间件

    本文主要针对Golang内置库 net/http 做了简单扩展,通过添加中间件形式实现了管道(Pipeline)模式,这样好处是各模块之间是低耦合,符合单一职责原则,可以很灵活通过中间件形式添加一些功能到管道...接下来,定义一个 Pipeline 方法,里面使用嵌套形式, 使用了上面定义三个测试中间件. func Pipeline(next http.Handler) http.Handler {...Chain struct,用来接收添加到管道中间件, AddMiddlewares() 函数,接收了多个Handle, 然后组装到 Chain 对象并返回, 接下来调用 Then() 函数,...把管道中间件和业务Handler 关联起来。...本文go web简单实现了中间件机制,这样带来好处也是显而易见,当然社区也有一些成熟 middleware 组件,包括 Gin 一些Web框架也包含了 middleware 相关功能,

    53640

    c#,如何序列化反序列化一个字典对象?

    .Net提供各种序列化类,通过使用这些类,. Net对象序列化和反序列化变得很容易。但是字典对象序列化并不是那么容易。为此,您必须创建一个能够序列化自身特殊Dictionary类。...不同业务案例,序列化技术可能不同。 今天,让我们通过一个示例讨论如何实现序列化/反序列化。代码文章中共享,您可以应用程序中使用。继续阅读,如果你有其他方法,请告诉我。...要序列化dictionary对象,首先需要创建一个自定义dictionary类,实现IXmlSerializable接口。...您需要在这些方法实现逻辑。...如果您有不同业务需求,您可以将其更改为根元素类型。 自定义字典类就绪后,就可以开始将dictionary对象编写为XML文件。

    3.3K10

    FreeSWITCH一个简单IVR

    可以看到ivr动作主要是entry项里配置完成,在上述例子,第一个entry里配置了按键0,通过menu-exec-app执行一个FreeSWITCHApp(transfer),再次通过Dialplan...把并户来话转接到菜单了,Dialplan中加入一个extension(请注意,你需要加到正确Dialplan Context,如果不确定应该加到哪个Context的话,default和public...通过上面的ivr.xml配置,我们已经知道如何配置一个简单IVR了,接下来我们配置一个带有二级菜单IVR。...不过我们也看到了,我们上面的XML IVR极其简单实际业务,我们可能需要和外面的一些服务做交互,比如查询数据库,请求一个Web服务,等等,因此我们需要一种更灵活方式来配置IVR应用,在此,我们介绍下使用...第一个按键收集之后,可以根据实际再收余下按键。 上面我们实现一个简单常见IVR场景,学会了简单流程,读者可以结合实际,写出功能更强大IVR脚本,好记性不如烂笔头,现在就来动手来写一个吧。

    4.1K20

    c#datagridview表格动态增加一个按钮方法

    c#datagridview表格动态增加一个按钮方法,如果想要这一套教程可以移步去这里 《期末作业C#实现学生宿舍管理系统》,对了最近我们有一个人工智能交流群,如果大家对代码有问题,想交流可以进群...效果图片 : 第一步: Load事件写入代码 //datagridview添加button按钮 DataGridViewButtonColumn btn = new...别急 我们 dataGridView1_CellContentClick事件添加方法 //点击第一行button按钮事件 int index = dataGridView1...id值 第三步: 相信大家也发现了,我们按钮都能触发,那这样肯定不能区分删除和修改,于是我们给控件命名作用就来了 我们 dataGridView1_CellContentClick事件修改下刚刚代码...这里有一个bug就是第三行没数据需要隐藏,现在还没有解决,欢迎大家指出!

    1.6K30

    WebSocketASP.NET MVC4简单实现

    WebSocket 规范目标是浏览器实现和服务器端双向通信。双向通信可以拓展浏览器上应用类型,例如实时数据推送、游戏、聊天等。...有了WebSocket,我们就可以通过持久浏览器和服务器连接实现实时数据通信,再也不用傻傻地使用连绵不绝请求和常轮询机制了,费时费力,当然WebSocket也不是完美的,当然,WebSocket...本节简单介绍一个服务器端和浏览器端实现WebSocket通信简单示例。...只是简单检查当前连接状态,如果是打开,那么拼接了接收到信息和时间返回给浏览器端。...2.浏览器端 另外一个视图中,我们使用了原生WebSocket创建连接,并进行发送数据和关闭连接操作 @{ ViewBag.Title = "Index"; } @Scripts.Render

    2.5K50

    使用 Errbot Python 构建一个简单聊天机器人

    好了,现在您已经安装了 errbot,是时候目录设置所需所有文件了。 让我们首先创建一个目录。 mkdir chatbot 现在,让我们进入目录。...编写插件 当你输入“errbot –init”命令时,它会设置一个名为插件目录,我们将在那里构建我们目录。 首先,让我们进行正确进口。...这是您一个插件。现在,如果您运行命令“!hello”,您将收到一条消息,说你好,世界! 注意 - 为了为您系统设置插件,您必须配置“config.py”文件。...errbot Python 构建和设置聊天机器人基础知识。...结论 Errbot还有大量其他功能可供开发人员和管理员使用。它们一个都以结构方式记录在 Errbot 官方文档页面

    35330

    100行JavaScript代码React优雅实现简单组件keep-Alive

    假设有下述场景: 移动端,用户访问了一个列表页,上拉浏览列表页过程,随着滚动高度逐渐增加,数据也将采用触底分页加载形式逐步增加,列表页浏览到某个位置,用户看到了感兴趣项目,点击查看其详情,进入详情页...,会回到列表页顶部,因为列表页组件被路由卸载后重建了,状态被丢失 如何实现 React 状态保存 Vue ,我们可以非常便捷地通过 标签实现状态保存,该标签会缓存不活动组件实例...,我们需要研究如何自动保存状态 最初版本react-keep-alive image.png 1500行TypeScript代码React实现组件keep-alive 我这篇文章对源码进行了解析...image.png 庖丁解牛,源码解析 最简单版本reactkeep-alive实现演示地址 使用方式:开箱即用 import React, { useState } from 'react...,很简单,这里this.props.children是虚拟DOM,经过Babel编译和React处理,最终会转化成真实DOM节点渲染 从零自己编写一个mini-React框架 如果你不是很懂,那么可以看我这篇文章

    5K10

    使用Unity3D设计思想实现一个简单C#赛车游戏场景

    最近看了看一个C#游戏开发公开课,该公开课中使用面向对象思想与Unity3D游戏开发思想结合方式,对一个简单赛车游戏场景进行了实现。...原本C#很方便地就可以完成一个小场景,使用Unity3D设计思想(即一切游戏对象皆空对象,拖拽组件才使其具有了活力)来实现却需要花费大量时间与精力,究竟它神奇什么地方?...首先,IComponent接口定义了本游戏中各个组件需要实现一个或多个方法,各个组件只需要实现IComponent接口便可以被注册到GameObject。...(3)GameObject定义AddComponet方法,提供对为游戏对象添加组件代码实现。...:   这里一个简单赛车游戏场景就实现完毕,虽然这样一个场景十分简单,但是通过将面向对象思想与Unity3D组件化思想结合起来,我们发现实现一个游戏会很麻烦。

    1.7K30

    手把手教你 TKE 集群实现简单蓝绿发布和灰度发布

    /EKS 集群自带 LB 插件实现简单蓝绿发布和灰度发布。...选中了其中一个版本 Deployment Pod,通过修改 Service selector 决定 服务版本 label 值来改变 Service 后端对应 Deployment,实现让服务从一个版本直接切换到另一个版本...,只要不同工作负载 Pod 都能被相同 selector 选中,就可以实现一个 Service 对应多个版本工作负载效果,调整不同版本工作负载副本数就相当于调整不同版本服务权重,实现灰度发布...部署多版本工作负载 要实现蓝绿发布或灰度发布,首先我们需要在集群中部署多个版本工作负载,这里以简单 nginx 为例,部署第一个版本: apiVersion: apps/v1 kind: Deployment...总结 本文我们介绍了如何在有限条件下在 Kubernetes 集群实现简单蓝绿发布与灰度发布,对于一些简单发布需求场景可以考虑使用这种方案。 ?

    1.5K105

    基于 Redis 实现简单限流器及其路由中间件应用

    限流器概念 作为一个分布式存储中间件,我们还可以基于 Redis 实现限流器功能。...简单实现方案 结合单位时间、访问上限、访问次数等要素,我们会很轻松地联想到可以通过 Redis 字符串数据结构实现限流器功能: 通过 SET 指令初始化限流器键(基于用户 ID、IP 地址等标识来源变量进行拼接... Laravel 应用,路由访问频率限制功能底层使用就是通过这种机制实现限流器。...响应头中,会添加访问上限和剩余可用访问次数字段: 小结 这只是 Redis 限流器简单实现版本,除此之外,还可以基于时间窗口和漏斗算法实现更加高级限流器,Laravel 队列系统频率限制功能就是基于这种限流器实现...,下篇教程,学院君就来给大家介绍如何实现更高级 Redis 限流器及其 Laravel 底层实现源码。

    3.2K30

    python实现将range()函数生成数字存储一个列表

    说明 同学代码遇到一个数学公式牵扯到将生成指定数字存储一个列表,那个熊孩子忽然懵逼不会啦,,,给了博主一个表现机会,,,哈哈哈好嘛,虽然很简单但还是记录一下吧,,,嘿嘿 一 代码 # coding...好嘛,,,有没有很神奇节奏! 补充知识:Python 通过range初始化list set 等 啥也不说了,还是直接看代码吧!...""" 01:range()函数调查 02:通过help()函数调查range()函数功能 03:Python转义字符 04:使用start、step、stop方式尝试初始化list、tuple、...set.add {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a'} tempSet.add('a') print("set.add " + str(tempSet)) 以上这篇python实现将...range()函数生成数字存储一个列表中就是小编分享给大家全部内容了,希望能给大家一个参考。

    4.3K20

    用最简单方式ASP.NET Core应用实现认证、登录和注销

    本篇文章提供了一个极简实例让读者体验如何在ASP.NET Core应用实现认证、登录和注销。...ASP.NET Core应用认证实现一个名为AuthenticationMiddleware中间件,该中间件处理分发给它请求时会按照指定认证方案(Authentication Scheme...接下来我们就通过一个简单实例来演示如何在一个ASP.NET Core应用实现认证、登录和注销功能。...对于经过认证请求,我们会响应一个简单HTML文档,并在其中显示用户名和一个注销链接。 public class Program { ......图19-3还反映了一个细节,调用HttpContext上下文ChallengeAsync方法会将当前路径(主页路径“/”,经过编码后为“%2F”)存储一个名为ReturnUrl查询字符串,SignInAsync

    3.5K30

    DWR实现直接获取一个JAVA类返回值

    DWR实现直接获取一个JAVA类返回值     DWR是Ajax一个开源框架,可以很方便是实现调用远程Java类。但是,DWR只能采用回调函数方法,回调函数获取返回值,然后进行处理。...} } 上面这个类很简单,里面的getString就直接返回一个字符串。...我们假设在DWR配置了TestDWR中所对应类未JTest,那么我们要调用getString方法,可以这样写: function Test() {     //调用Java类TestgetString...,就是调用java类方法,然后回调函数处理,上面那段话执行后会显示test,也就是java方法返回值。...现在,让我们打开DWRengine.js文件,搜索一个asyn,马上,就发现了一个setAsync方法,原来,DWR是这个方法设置成属性封装起来了。这样,我们就可以实现获取返回值功能了。

    3.2K20

    用 Lunchbox vue3 创建一个旋转 3D 地球竟是如此简单

    你可以根目录 package.json 文件查看它们。...现在我们可以开始我们应用程序构建和渲染 3D 对象。 创建场景 场景是允许我们设置要渲染项目的对象。 它就像一个显示区域,可以将对象放在一起并呈现给浏览器。...该库提供了一个 组件,其中包含用于 Three.js 创建渲染器和场景底层代码。...复制下面的图像并将它们放在项目的 /public 文件夹: 接下来,将第一个图像路径添加到第一个 组件 src 属性,并为附加属性赋予一个 “map” 值。...本文中,我们创建了一个场景,构建了不同网格几何体,为网格添加了纹理,为网格添加了动画,并为场景对象添加了事件侦听器。

    52110
    领券