2013-07-18 3 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(); 

выше будет возвращать список Key с из вашей коллекции Dictionary<string, string[]> где Value коллекции найден, чтобы содержать строку, которую вы искали.

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_, если не существует ни одного ключа return null, becase является значением по умолчанию для типа строки. – Joseph

0

Использование Linq:

d.Single(x => x.Value.Contains("198")).Key // would return "4Q" in your example 
Смежные вопросы