2017-02-24 55 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); 
    } 
} 
相關問題