来自IDictionary的C#getKey值 - 值可以重复

时间:2017-02-24 13:05:23

标签: c# list dictionary

我有public static IDictionary<int, int> dictionaryLIndex;

在填写并打印后,它给了我:

key = 0, value = 18
key = 1, value = 2
key = 2, value = 1
key = 3, value = 18
key = 4, value = 3

使用以下命令创建此词典:

dictionaryLIndex= ELWIndex.ToDictionary(pair => pair.Key, pair => pair.Value);

ELWIndex是IList<KeyValuePair<int,int>>所以从字典打印的Key i实际上是列表的索引。

澄清一下,我需要根据值获取dict的键。这里的事情是这个值可以重复,所以我怎么能做到这一点?考虑到可以不时调用这个过程。

最终目标是获取该密钥(列表中的索引)并在另一个列表中搜索该位置并对该索引执行某些操作。

只有一个人想到了我。用该键获取第一个值后,我可以一起从dict中删除该键值对吗?所以下一次只有一个具有该值的键...

那么如何从给定的值中获取密钥?并且,这最后的第二个想法是否可行?

2 个答案:

答案 0 :(得分:1)

使用FirstOrDefault根据值从字典中获取第一个键值对:

var search = 18;
var kvp = dictionaryLIndex
    .Where(p => p.Value == search)
    .Cast<KeyValuePair<int,int>?>()
    .FirstOrDefault();

如果kvpnull,则搜索值不在字典中。

如果kvp不是null,请使用kvp.Key查找密钥。您可以稍后从dictionaryLIndex删除该密钥。

if (kvp.HasValue) {
    var key = kvp.Value.Key;
    Console.WriteLine("Key = {0}", key);
}

注意:必须使用强制转换为KeyValuePair<int,int>?,因为KeyValuePair<int,int>是值类型,其成员也是值类型。

答案 1 :(得分:0)

假设我理解正确并且您正在尝试创建另一个不包含重复值的字典,我认为这可能对您有用:

Dictionary<int, int> noDuplicates = new Dictionary<int, int>();
foreach (var item in dictionaryLIndex)
{
    if (!noDuplicates.ContainsValue(item.Value))
    {
        noDuplicates.Add(item.Key,item.Value);
    }
}