c# - 使用 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
即浪费更少的内存并提高效率?
解决方案
推荐阅读
- spring - Vaadin 10:单击按钮时服务器连接丢失
- python - 在找到字符串之前从文件中删除所有内容的问题
- path - 无法在 Ubuntu 14.04 中编译 GPD
- amazon-web-services - 我们是否需要在 EMR 中为 master 和 core 创建两个 AMI?
- c++ - MSVC 无法根据模板参数进行数学运算,这是一个错误吗?
- sql - 在函数调用后合并返回错误值,然后是乘法
- r - 生成样本量不等的多元正态数据
- angular - Angular 6 - CSS - 粘性标题
- r - 在闪亮的 flexdashboard 中确定范围
- vue.js - 在 Vue.js 中分配数组的正确方法是什么?