首页 > 解决方案 > 使用 Span 存储单词集合的有效方法是什么?

问题描述

我需要将一组单词存储在Span<T>. 使用 astring[]非常简单且高效。我想使用Span<T>. 我可以用Span<byte>a 代替,string但不能用 aSpan<Span<byte>>代替 a string[]

由于Span<Span<byte>>编译器禁止使用,因此一种解决方案是设置最大字长并将字存储在一个Span<byte>大小为最大字数 * 最大字长的格式中。

这是一些伪代码:

int numberOfWords;
int maxWordSize;
Span<byte> words = stackalloc[numberOfWords * maxWordSize];
Span<int> wordSize = stackalloc[numberOfWords];

所以而不是:

string[] wordArray;
int index;
.....
var someString = wordArray[index];

我会使用:

Span<byte> someWord;
someWord = GetWord(index * maxWordSize, wordSize[index]);

因此,如果string[]可以将 a 视为具有二维的 char 数组的数组,我的想法是将结构展平为一维并按索引 * 大小检索每个单词,而不是按索引检索它。我不确定是否可以使用Span<T>.

然而,虽然这会起作用,但我觉得我浪费了很多内存,因为我会为每个单词保留相同数量的内存,并且可能会有很多小单词。

有没有更好的方法来替换 a string[]Span即浪费更少的内存并提高效率?

标签: c#memory

解决方案


推荐阅读