2017-02-24 37 views
-1

我有这个public static IDictionary<int, int> dictionaryLIndex;C#信息getKey从IDictionary中的值 - 值可以repeted

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

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>>所以关键我从字典印刷实际上是标o列表。

澄清,我需要基于一个值得到字典的关键。这里的事情是这个值可以被重复,所以我怎么能做到这一点?考虑到这个过程可以不时地被调用。

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

只是一个想法,刚刚找到我。在使用该键获得第一个值之后,我可以从字典中删除该键 - 值对吗?所以下一次只会有一个键的值...

那么如何从给定的值中获得密钥?而且,这最后一秒是否可行?

感谢您的帮助提供,这将是非常apreciated

+0

为什么向下票呢? – NachoMiguel

+1

为什么你认为*“我从字典中打印的键实际上是列表的索引。”*?你正在使用列表中的键,而不是索引 –

+0

是的,你是对的@SergeyBerezovskiy。 – NachoMiguel

回答

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>是值类型,和它的两个成员是值类型为好。

+0

我想从kvp(kvp.key)获得密钥,但那不是工作,我试着投它,但没有运气 – NachoMiguel

+0

@NachoMiguel请参阅编辑。 – dasblinkenlight

+0

太棒了。非常感谢的人 – NachoMiguel

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); 
    } 
} 
相关问题