如何通过其中一个搜索三元素(key_value pair Dictionary)

时间:2014-12-03 17:30:14

标签: c# dictionary

这是我的代码:

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
    {
    }
}

2 个答案:

答案 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();