2016-06-14 48 views
1

我創建多個鍵字典作爲(registrantsFields可枚舉類型)怎麼做局部搜索上的多個按鍵字典

var registrantsRepository = registrantsFields.ToDictionary(c => Tuple.Create(c.RegistrantID, c.FieldID, c.DataID)); 

我用的containsKey搜索字典作爲

if (registrantsRepository.ContainsKey(Tuple.Create(registrantId, fieldId, dataId))) 

到目前爲止,工作正常。

但我想只用2個鍵搜索詞典,即什麼字典包含某些registrantId和fieldId,但包含任何dataId。換句話說,我喜歡找到像

var entries = registrantsRepository(Tuple.Create(registrantId, fieldId, *)) 

它應該怎麼做(也許在Linq中)?謝謝。

+2

您有任何性能要求嗎?您是否在意O(n)或O(1)是否需要查找該值? –

+0

是的,我需要儘可能快。 – user585440

+0

您決定搜索後,是否需要在字典中添加更多項目?或者你可以認爲字典「關閉」? –

回答

4

我只是創建一個單獨的查找。

var registrantsByIdAndField = registrantsFields 
    .ToLookup(r => Tuple.Create(c.RegistrantID, c.FieldID)); 

那麼你仍然可以快速查找與此:

var entries = registrantsByIdAndField[Tuple.Create(registrantId, fieldId)]; 
1

沒有像這樣的通配符搜索,但有一種方法可以忽略那些在搜索時不感興趣的字段。

遍歷Keys的集合,引用您感興趣匹配的Tuple的屬性。您可以使用LINQ的Any方法來做到這一點。

+0

在這種情況下,如何獲取registrantId和fieldId的實際數據? – user585440