Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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#_Search_Tags_Filtering_Inverted Index - Fatal编程技术网

C# 通过匹配公共标记集,从大型池中选择一组值(具有多个标记)

C# 通过匹配公共标记集,从大型池中选择一组值(具有多个标记),c#,search,tags,filtering,inverted-index,C#,Search,Tags,Filtering,Inverted Index,我正在做一个游戏,需要一种有效的方法来使用标签集合从一个大集合中选择记录的子集 有一个3k+的声音集合,每个声音都有一些简单的标签。集合在启动时加载一次,在运行时不会更改,但是,对于每个新生成,它可能会更改 在运行时,我需要对游戏中发生的某些事件做出反应。这意味着我需要通过使用一组描述所述事件的标签来检索最适合该事件对游戏世界影响的声音。过滤器标记可以有包含和排除标记 这不是一个大问题,可以使用相对简单的Linq解决。但我担心的是,这段代码会在游戏循环中运行。在单个帧中可能会发生任意数量的事件,

我正在做一个游戏,需要一种有效的方法来使用标签集合从一个大集合中选择记录的子集

有一个3k+的声音集合,每个声音都有一些简单的标签。集合在启动时加载一次,在运行时不会更改,但是,对于每个新生成,它可能会更改

在运行时,我需要对游戏中发生的某些事件做出反应。这意味着我需要通过使用一组描述所述事件的标签来检索最适合该事件对游戏世界影响的声音。过滤器标记可以有包含和排除标记

这不是一个大问题,可以使用相对简单的Linq解决。但我担心的是,这段代码会在游戏循环中运行。在单个帧中可能会发生任意数量的事件,因此最快的声音搜索/提取时间对于避免在游戏中“事件密集”的时刻出现严重的帧丢失至关重要

我不希望每一帧都这样做,但很可能在一帧中会发生多个事件

下面是声音集合的样子:

audio-human-fall-01 <fall, impact, fatal>
audio-human-fall-02 <fall, floor, gear, impact>
audio-human-fall-03 <floor, fall, impact>
audio-human-fall-04 <fall, voiceover, fatal>
audio-human-fall-05 <fall, impact, floor, voiceover>
...
我将最终得到一本字典,它将包含以下内容:

<fall, floor, impact> audio-human-fall-02
<floor, fall, impact> audio-human-fall-02
<floor, impact, fall> audio-human-fall-02
<floor, impact, fall> audio-human-fall-02
<impact, floor, fall> audio-human-fall-02
<impact, fall, floor> audio-human-fall-02
<impact, floor, fall> audio-human-fall-02
<floor, impact, fall> audio-human-fall-02
<floor, fall, impact> audio-human-fall-02
etc...
audio-human-fall-02
audio-human-fall-02
audio-human-fall-02
audio-human-fall-02
audio-human-fall-02
audio-human-fall-02
audio-human-fall-02
audio-human-fall-02
audio-human-fall-02
等
赞成:检索完全匹配的声音是瞬间的

缺点:严重的启动开销和相对较大的查找字典

谢谢, -亚历克斯

audio-human-fall-02 <fall, floor, impact, gear>
audio-human-fall-03 <floor, fall, impact>
audio-human-fall-02 <fall, floor, impact>
<fall, floor, impact> audio-human-fall-02
<floor, fall, impact> audio-human-fall-02
<floor, impact, fall> audio-human-fall-02
<floor, impact, fall> audio-human-fall-02
<impact, floor, fall> audio-human-fall-02
<impact, fall, floor> audio-human-fall-02
<impact, floor, fall> audio-human-fall-02
<floor, impact, fall> audio-human-fall-02
<floor, fall, impact> audio-human-fall-02
etc...