2013-03-16 3 views
3

Скажем, у меня есть два словаря со следующими ключевыми парами значений:Проверьте, содержит ли словарь подстроку?

1, "Hello" 
2, "Example" 

И другой словарь следующим образом:

1, "HelloWorld" 
2, "Example2" 

Я хочу, чтобы выяснить, если эти словари содержат подстроку «привет» в них ,
dictionary.ContainsValue("Hello") будет работать для первого примера, но не для второго. Как проверить наличие подстроки во всех значениях в словаре?

ответ

8

Просто используйте Any, чтобы проверить на первое значение, которое содержит «Hello»

dictionary.Any(kvp=>kvp.Value.Contains("Hello")) 
+0

Это не признает функцию «Любой». –

+1

Убедитесь, что вы добавили 'using System.Linq;'. – juharr

+0

Для этого нужно проверить элемент словаря _every_, поэтому любое увеличение производительности словаря будет игнорироваться. – user626528

0
dictionary.Values.Any(v => v.Contains("Hello")); 

словарь не является само по себе IEnumerable, поэтому он не будет иметь расширения LINQ применить к нему.

+0

Словарь - это 'IEnumerable'' KeyValuePairs' – juharr

+0

D'oh, я думал, что это что-то еще, вы правы. – Kevin

-1

Словарь не позволяет искать подстроки. Чтобы найти его, вам нужно перечислить все значения и проверить каждую для подстроки, как это было предложено juharr. Однако этот метод крайне неэффективен. Используйте его только в том случае, если вы вообще не заботитесь о производительности поиска.
Если вам нужна хорошая производительность, используйте алгоритм массива суффикса. https://en.wikipedia.org/wiki/Suffix_array

+0

Это кажется излишним и не будет работать для поиска «Hello» в «HelloWorld», потому что «Hello» не является суффиксом в этом случае. – juharr

+0

@juharr, это может быть излишним, если TS не заботится о производительности, но вы, очевидно, не понимаете, что такое алгоритм суффиксного массива. Он всегда находит _any_ подстроки. – user626528

+0

Очевидно, вы должны объяснить, что такое алгоритм массива суффикса и как он работает. – scenia

Смежные вопросы