2012-10-12 172 views
0

我想知道是否有可能有一個詞典,其中的關鍵是一個字符串數組,然後通過比較搜索詞與數組來搜索詞典。以數組爲關鍵詞搜索dictionairy?

EG:

我的陣列有7個字在它

該數組是關鍵。我想在字典中搜索關鍵字可能包含單詞「has」的任何鍵/值。這可能嗎?

+0

你試過了什麼? –

回答

2

不,這基本上不會工作 - 即使使用自定義相等比較器。這聽起來像你真的想要的是一個單詞詞典,其中每個單獨的條目有多個值。如果您已經將輸入數據作爲序列輸入,則可以使用ToLookup輕鬆創建。

1

也許詞典與自定義比較器可能是要走的路(http://msdn.microsoft.com/en-us/library/ms132072.aspx),但在您的示例(數組包含一個詞)中,可能會有更多匹配一個鍵的結果。所以字典可能不是最好的存儲選擇,因爲它只會返回一個值

0

我會與linq一起將單詞(鍵)的集合與它們的值轉換爲字典,並將其作爲關鍵字和確切地說,所有具有包含該單詞的關鍵字的值的數組。

public class WordsWithValue 
{ 
    public string[] Words { get; set; } 
    public object Value { get; set; } 
} 

public IDictionary<string, object[]> GetValuesForWord(IEnumerable<WordsWithValue> wordsWithValues) 
{ 
    return wordsWithValues.SelectMany(wwv => wwv.Words.Select(word => Tuple.Create(word, wwv.Value))) 
          .GroupBy(tuple => tuple.Item1, tuple => tuple.Item2, (word, values) => Tuple.Create(word, values.ToArray())) 
          .ToDictionary(tuple => tuple.Item1, tuple => tuple.Item2); 
} 

您當然可以改寫這幾個方法,使這個更加清晰,另一種選擇是使用的,而不是我這裏使用的有比Item1Item2更明智名Tuple小號匿名類。