【发布时间】:2014-03-21 18:32:56
【问题描述】:
我正在尝试实现 Baudot 字符编码。现在,我正在使用两个字典,它们只是彼此的镜像:
Dictionary<char, int> Lookup = new Dictionary<char, int> {
{ ' ', 0x100100 },
{ '-', 0x011000 },
{ '/', 0x010111 },
{ '0', 0x001101 },
{ '1', 0x011101 },
...
};
Dictionary<int, char> Reverse = new Dictionary<int, char> {
{ 0x100100, ' ' },
{ 0x011000, '-' },
{ 0x010111, '/' },
{ 0x001101, '0' },
{ 0x011101, '1' },
...
};
是否已经有一个内置类型可以处理这个问题?比如:
var lookup = new Lookup<int, char>();
lookup.GetByKey(0x100100);
lookup.GetByValue('c');
当我搜索“反向查找”或“查找表”时,我找不到任何东西,一切似乎都与 DNS 或 LinqToSql 有关。
(我正在使用Baudot,因为它对于某些Cospas Sarsat 设备是必需的)
【问题讨论】:
-
对于介于 0 和您拥有的最大 int 值之间的每个 int 值,您的 Dictionary 中是否有一个 char 值(即关于 int 键,它们是稀疏的还是完全填充的)?跨度>
-
你说的是这么少的字符,我认为一个简单的单个数组就足够了。使用 int 键直接索引来获取 char 会比任何东西都快,并且从 char 到 int(即 indexOf)的简单线性搜索可能不会比小数组的累积 Dictionary 开销慢多少。其他解决方案似乎有点矫枉过正。
-
@hatchet Baudot 是六位编码,所以不存在每个可能的 int 的值。我还没有真正想出在这种情况下该怎么做。
-
只需使用不在 Baudot 字符集中的 sentinel char 值来指示未使用的位置。映射到 Baudot 字符的最小和最大 int 值是多少?我们不是在谈论一个非常小的系列吗?
-
哎呀,你甚至不需要一个数组,只需使用一个由 Baudot 字符组成的字符串常量,其中标记字符占据序列中的任何空位。
标签: c# .net data-structures