我有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中删除该键值对吗?所以下一次只有一个具有该值的键...
那么如何从给定的值中获取密钥?并且,这最后的第二个想法是否可行?
答案 0 :(得分:1)
使用FirstOrDefault
根据值从字典中获取第一个键值对:
var search = 18;
var kvp = dictionaryLIndex
.Where(p => p.Value == search)
.Cast<KeyValuePair<int,int>?>()
.FirstOrDefault();
如果kvp
为null
,则搜索值不在字典中。
如果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);
}
}