Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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# 什么';这是一种性能友好的方法,可以预存储412000个字符串,使它们';可在统一中重新搜索?_C#_Sqlite_Csv_Unity3d - Fatal编程技术网

C# 什么';这是一种性能友好的方法,可以预存储412000个字符串,使它们';可在统一中重新搜索?

C# 什么';这是一种性能友好的方法,可以预存储412000个字符串,使它们';可在统一中重新搜索?,c#,sqlite,csv,unity3d,C#,Sqlite,Csv,Unity3d,我有一个CSV文件,其中包含412000个字符串,我想在本地预存储,以便部署到Android和iOS。然后,游戏必须能够通过这些字符串检查是否存在基于用户输入的匹配 我能看到的唯一可行的解决方案是SQLite。我还没有找到一个非常好的用于Unity的SQLite解决方案 在统一中是否有我忽略的内在解决方案 解决方案必须在本地运行。没有HTTP调用。400000个字符串绝对是微不足道的 只要把它们放在字典里(列出你喜欢的相关内容) 这完全不是问题 很可能你只是从一个文本文件中加载它们,非常简单

我有一个CSV文件,其中包含412000个字符串,我想在本地预存储,以便部署到Android和iOS。然后,游戏必须能够通过这些字符串检查是否存在基于用户输入的匹配

我能看到的唯一可行的解决方案是SQLite。我还没有找到一个非常好的用于Unity的SQLite解决方案

在统一中是否有我忽略的内在解决方案


解决方案必须在本地运行。没有HTTP调用。

400000个字符串绝对是微不足道的

只要把它们放在字典里(列出你喜欢的相关内容)

这完全不是问题

很可能你只是从一个文本文件中加载它们,非常简单

 public TextAsset theTextFile;
(只需拖动到Inspector中的链接,就像任何纹理或类似纹理一样。)

然后,您可以非常轻松地将该文件读取为JSON。(只需使用
JsonUtility
。你可以在SO和其他地方找到许多这样的例子。)例如

   Blah bb = JsonUtility.FromJson< Blah >(ta.text);
   yourDict = bb.fieldname.ToDictionary(i => i.tag, i => i);
你可以谷歌很多例子


字符串有多长,您需要如何搜索它们?(起始、包含、输入/输入等)少于50个字符,大多数少于25个。需要100%匹配。因此,如果我写“ThisCanBeAStringExample”,它需要检查是否在可用字符串中。我在想也许有人可以将CSV文件作为字典加载到内存中,但还没有弄清楚如何加载。可以跳过大小写敏感度,实际上大小写都不重要。我不确定我对字典的建议是否内存太大,必须进行测试。我看不出有什么理由结束投票这个问题-事实上,这是一个极好的问题。几天前,我尝试使用StreamReader读取CSV文件中的行,将其加载到词典中。当我这么做的时候,我的程序冻结了。您可以在此处看到代码:。如果我添加了一个“maxTestAmount”,每添加一个单词就增加一个,并将其设置为5000,那么它在开始时会冻结,但在一段时间后会解冻。链接中的方法是否无效?我相信它有效!这次我尝试了这个链接中的方法:它立即加载。计数显示加载了+400k字符串。出现了一个新问题,结果表明,虽然这种方法加载速度很快,但无法正确加载北欧字符æ、ø和å。但它确实解决了我原来的问题。使用一个简短的python脚本,我发现CSV文件的编码设置为“cp1252”。我在等UTF8。我会努力解决的。干杯!顺便说一句,我不确定您是否查看过它,但是您可以在这里使用HashSet来代替字典(以获得更高的性能和简单性)。一般来说,在C#中,有大量的“集合”可用于不同的情况。他们真的让事情变得容易了。有很多教程,如顺便说一句,你提到大写/小写。你可能已经知道,如果你想解决这个问题,幸运的是它很简单。只需将它们全部保存为lc,当您选中一个时,将其转换为lc以检查“一切都是lc”!干杯
var wordList = theTextFile.text.Split('\n');