我试图实现Baudot字符编码。现在,我使用的是2个字典,它们只是彼此的镜像:
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');
当我搜索“反向查找”时,我找不到任何内容。或者查找表&#39;,一切似乎都与DNS或LinqToSql有关。
(我使用Baudot,因为某些Cospas Sarsat设备需要这样做
答案 0 :(得分:1)
我认为你需要一个Bi-Directional
词典。有许多这样的实现可用。我喜欢这个链接中的那个:
http://blogs.microsoft.co.il/blogs/ranw/BDirectional.txt
这是键和值的唯一先决条件,不应该是同一类型,在您的情况下适用。
答案 1 :(得分:0)
我认为没有这样的事情...... 一些扩展方法怎么样? 使用以下方法创建第一个字典,然后创建第二个字典。通过使用两个字典,您有两个哈希表,并且您的访问权限始终为O(1)。
public static class DictionaryExtensions
{
public static IDictionary<U, T> Reverse<T, U>(this IDictionary<T, U> dictionary)
{
var result = new Dictionary<U, T>();
foreach(var x in dictionary)
{
result[x.Value] = x.Key;
}
return result;
}
}
答案 2 :(得分:0)
如果是我,我只有一对配对列表。
class WhateverPair
{
int Binary {get;private set;}
char TheChar {get;private set;}
public WhateverPair(int b, char c) { Binary = b; TheChar = c; }
}
然后只需填写你的第一本字典即可填写你的清单。
List<WhateverPair> encodingtable;
char result = encodingtable.First(x=>x.binary == 0x010010).thechar;
int reverse = encodingtable.FirsT(x=>x.thechar == '1').binary;