Is there a built in type for a lookup/reverse lookup table?
本问题已经有最佳答案,请猛点这里访问。
我正在尝试实现波特字符编码。现在,我使用的是两个字典,它们只是彼此的镜像:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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' }, ... }; |
是否有内置类型可以处理此问题?比如:
1 2 3 |
号
当我搜索"反向查找"或"查找表"时,找不到任何内容,所有内容似乎都与dns或linqtosql相关。
(我用的是波多特,因为它对一些搜救卫星设备是必要的)
我想你需要一本
江户十一〔一〕号
唯一的先决条件是键和值不应是相同的类型,在您的情况下,这是适用的。
如果是我的话,我就有一个配对列表。
1 2 3 4 5 6 | class WhateverPair { int Binary {get;private set;} char TheChar {get;private set;} public WhateverPair(int b, char c) { Binary = b; TheChar = c; } } |
号
然后像填第一本字典一样填好你的单子。
1 2 3 | List<WhateverPair> encodingtable; char result = encodingtable.First(x=>x.binary == 0x010010).thechar; int reverse = encodingtable.FirsT(x=>x.thechar == '1').binary; |
我认为没有这样的事…有什么扩展方法吗?使用以下方法创建第一个词典,然后创建第二个词典。有了两个字典,您就有了两个哈希表,并且您的访问权限总是O(1)。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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; } } |