c# – 实现简单的字符串实习
问题
我有一大堆字符串在一些对象之间重复.需要的是字符串实习.这些对象使用protobuf-net进行序列化和反序列化.我知道它应该处理.NET字符串intering,但我的测试表明我自己获取所有这些字符串并创建一个Dictionary< string,int> (值与其唯一标识符之间的映射),用int替换原始字符串值,可以得到更好的结果. 但问题在于映射.它只能单向搜索(我的意思是O(1) – 可搜索).但我想按键或按O(1)中的值搜索.不只是按键. 途径 字符串集是固定的.这听起来像一个数组.按值搜索是O(1),快速致盲.甚至没有在字典中分摊 – 只是不变,由索引. 数组的问题是按键搜索.这听起来像哈希.但是,嘿,n个哈希值并不是均匀分布在n元素阵列的n个单元中.使用模数,这可能会导致碰撞.那很糟. 我可以创建一个n * 1.1长度的数组,并尝试随机散列函数,直到我没有碰撞,但……那……只是……感觉……错了. 题 如何通过键(字符串)和值(整数)来解决问题并实现O(1)查找时间? 两个词典不是一个选项;) 解决方法
两个词典就是答案.我知道你说它不是一个选项,但是没有理由,很难看出两个词典如何完美地回答你的场景,易于理解,快速,内存效率高的代码.
从这里开始,您似乎希望执行两项基本操作; myStore.getString(int); // O(1) myStore.getIndexOf(string); // O(1) 你很高兴一个人被实现为字典,而不是另一个.是什么让你停下来? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |