这是我的代码:
public class PairedKeys
{
public byte Key_1 { get; set; }
public byte Key_2 { get; set; }
public PairedKeys(byte key_1, byte key_2)
{
Key_1 = key_1;
Key_2 = key_2;
}
}
public static class My_Class
{
static Dictionary<PairedKeys, char> CharactersMapper = new Dictionary<PairedKeys, char>()
{
{ new PairedKeys(128, 48), 'a' },
{ new PairedKeys(129, 49), 'b' }
}
}
如何通过搜索CharactersMapper
获得Key_2
的价值?
这是我的尝试:
for (int j = 0; j < CharactersMapper.Count; j++)
{
try
{
char ch = CharactersMapper[new PairedKeys(????, Key_2)];
}
catch
{
}
}
答案 0 :(得分:2)
以这种方式使用字典,不会成为实现此目的的优化(即O(1)
)方式。但是,您可以循环访问,这将是O(n)
:
var result = dictionary.Where(d => d.Key.Key_2 == 3);
假设您正在寻找3
。
答案 1 :(得分:1)
使用LINQ,您可以执行以下操作以返回单个项目:
var ch = CharactersMapper.Single(cm => cm.Key.Key_2 == 49);
或者,如果您期望多个项目:
var chList = CharactersMapper.Where(cm => cm.Key.Key_2 == 49);
如您在评论中所述,这些将返回KeyValuePair<Classes.PairedKeys,char>
和IEnumerable<KeyValuePair<Classes.PairedKeys,char>>
。如果您只想获得char
内容,可以使用Select
方法:
//Single char
char singleChar = CharactersMapper.Single(cm => cm.Key.Key_2 == 49).Select(c => c.Value);
//list of chars
IList<char> charList = CharactersMapper.Where(cm => cm.Key.Key_2 == 49).Select(c => c.Value).ToList();