2013-07-18 11 views
1

下面是代碼我已經有,其工作方式:查找值<字符串,字符串[]>

private string GetRegionByStore(string store) 
{ 
    foreach (string items in d.Keys) 
    { 
     if (d[items].Contains(store)) 
     { 
      return items; 
     } 
    } 

    return null; 
} 

此搜索這樣在字典中的一個關鍵:

d.Add("4Q", new string[] { "27", "49", "198", "214", "226", "347", "351", "361", "439", "449", "613", "657", "662", "685" }); 

有很多條目,如4Q,4Z,4J等等,每個都有一個string[]裏面有數字。在另一個條目中永遠不會有相同的號碼,所以不必擔心重複。

我現在使用的方法現在可以工作,但感覺非常不方便,而且這是不好的做法。是否有一個LINQ查詢可以做到同樣的事情?

總結:在每個字典(?)中查找一個數字,如果存在,則返回密鑰。

+0

我覺得這根本不好。我認爲這個代碼非常簡單,易於閱讀和易於理解。我不確定LINQ查詢(可能存在)會像您的代碼一樣容易閱讀/理解。 –

回答

2

喜歡的東西:

var strores = d.Where(e => e.Value.Contains("27")).Select(e => e.Key).ToList(); 

以上將其中收集的Value被發現含有您搜索的字符串從您的收藏Dictionary<string, string[]>返回Key的List。

3

您可以使用此版本代碼:

private string GetRegionByStore(string store) 
{ 
    d.Keys.FirstOrDefault(k => d[k].Contains(store)); 
} 

要找到所有的鍵在字典:

private string GetRegionByStore(string store) 
{ 
    d.Keys.Where(k => d[k].Contains(store)).ToList(); 
} 
+0

> FirstOrDefault方法返回它們的合作包含變量_store_的值的第一個鍵,如果不存在任何鍵返回null,becase是字符串類型的默認值。 – Joseph

0

使用LINQ:

d.Single(x => x.Value.Contains("198")).Key // would return "4Q" in your example 
相關問題