Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#在词典中搜索词典的最快方法_C#_String_Dictionary - Fatal编程技术网

C#在词典中搜索词典的最快方法

C#在词典中搜索词典的最快方法,c#,string,dictionary,C#,String,Dictionary,我创建了一个文本管理器类,用于处理不同上下文(例如:常规上下文、菜单上下文、游戏上下文等)的文本 每个上下文都使用二进制文本文件创建,数据存储在字典中的字典中,如下所示: private Dictionary<string, Dictionary<string, string>> m_TextContexs; m_TextContexs[context][textID][actual text] public string GetText(string id) 我希

我创建了一个文本管理器类,用于处理不同上下文(例如:常规上下文、菜单上下文、游戏上下文等)的文本

每个上下文都使用二进制文本文件创建,数据存储在字典中的字典中,如下所示:

private Dictionary<string, Dictionary<string, string>> m_TextContexs;
m_TextContexs[context][textID][actual text]
public string GetText(string id)
我希望用户在这样的函数中只查找带有“
textID
”字符串的任何文本行:

private Dictionary<string, Dictionary<string, string>> m_TextContexs;
m_TextContexs[context][textID][actual text]
public string GetText(string id)
编辑:textID是唯一的,因为同一个textID在多个上下文中不存在

因此,此函数应该在所有现有上下文中查找字符串id,并返回有效的实际文本

这里的问题是,做这个操作最快的方法是什么。我不是一个有经验的程序员,所以我要做的是循环遍历所有上下文,并查看每个上下文中是否存在提到的文本ID

如果你想知道为什么我需要“上下文”来分组文本,那么如果不再需要上下文,我可以从内存中卸载该数据


非常感谢:)

字典在O(1)时间内从键中检索值,这意味着几乎是即时的,所以这个问题实际上取决于您的
上下文是什么动物,以及
textId
有多独特

你如何知道哪种语境是“正确的”语境?你能从用户在应用程序中的当前位置和路径确定这一点吗?如果是,则可以将该值传递给查找函数

否则,除非
textId
在上下文中是唯一的,否则循环遍历上下文对您没有好处。例如,给定
textid123
,您如何知道是想要
m_TextContexs[context1][123]
还是
m_TextContexs[context2][123]


如果
textId
在上下文中是唯一的(最佳情况),那么您可以简单地从图片中删除
context
,并使用
textId
作为唯一键的
Dictionary

Dictionary在O(1)时间内从键检索值,这意味着几乎是即时的,所以这个问题实际上取决于你的
上下文是什么样的动物,以及
textId
有多独特

你如何知道哪种语境是“正确的”语境?你能从用户在应用程序中的当前位置和路径确定这一点吗?如果是,则可以将该值传递给查找函数

否则,除非
textId
在上下文中是唯一的,否则循环遍历上下文对您没有好处。例如,给定
textid123
,您如何知道是想要
m_TextContexs[context1][123]
还是
m_TextContexs[context2][123]



如果
textId
在上下文中是唯一的(最佳情况下),那么您可以简单地从图片中删除
context
,并使用
textId
作为唯一键的
Dictionary

您能提供一个更好的例子来说明“Dictionary in a Dictionary”(词典中的Dictionary)的含义吗?还有,您所说的最快是什么?演出花在编码上的时间?其他的考虑因素呢,比如内存使用等等?夜猫子888通过在字典中搜索字典,我指的是我在上面为对象m_TextContexts写的那一行。主词典的关键是许多上下文,如c1、c2、c3等。。。在每个上下文中都有一个包含实际文本对的词典。例如,textID“id001”可以位于主字典的任何键中。但是它是独特的(因为它不会在不同的上下文中重复)。AndrewP,很抱歉我的问题模棱两可,是的,我所说的最快是指性能方面的。感谢Amit编辑我的问题并使其更具可读性。你能提供一个更好的例子来说明“词典中的词典”的含义吗?还有,你所说的最快是什么意思?演出花在编码上的时间?其他的考虑因素呢,比如内存使用等等?夜猫子888通过在字典中搜索字典,我指的是我在上面为对象m_TextContexts写的那一行。主词典的关键是许多上下文,如c1、c2、c3等。。。在每个上下文中都有一个包含实际文本对的词典。例如,textID“id001”可以位于主字典的任何键中。但它是唯一的(因为它不会在不同的上下文中重复)。AndrewP,很抱歉我的问题模棱两可,是的,我指的是性能方面的最快。感谢Amit编辑我的问题并使其更具可读性。如果textId是唯一的,但上下文也很重要,也许可以翻转原始词典,使其以textId为键,和一个具有上下文/文本值的结构/类,这意味着您仍然可以很容易地找到一个给定的上下文中的所有值,通过对LINQ查询进行ValueSt感谢Paul Smith,我是一个白痴,我没有在多个上下文中考虑相同的IDS。当我从Excel文件导出所有文本时,我将确保ID是唯一的。假设这样,AndrewP关于翻动原始词典的观点是有道理的。非常感谢大家!Paul Smith和Andrew-我仍然不确定实现此算法的最佳和最快(性能方面)是什么。假设textID是唯一的,我希望避免将主键设为textID,然后将值设为具有实际文本字符串和上下文字符串的结构或类,因为这意味着上下文在内存中的次数与文本在字典中的次数相同,这似乎是在浪费内存。我想保留上下文,所以当我想卸载上下文时,因为它们的文本不再需要,我可以通过在主词典中释放context键来快速完成。如果您可以提供一些示例,说明textId和context值,特别是当它们重合和不同时,我可能会提供一些更具体的建议。如果textId是唯一的,但context也很重要,可能会翻转原始字典,使其具有textId作为键,并具有conte的struct/class