Это один из подходов, но он ограничен 1 совпадением символов. Для описанного вами сценария чисел от 1 до 9 это работает нормально. Обратите внимание на использование s[0]
, которое ссылается на элементы списка как символ. Например, если в вашем списке есть «12», это не будет работать правильно.
string input = "123456123";
var list = new List<string> { "1", "4" };
var query = list.Select(s => new
{
Value = s,
Count = input.Count(c => c == s[0])
});
foreach (var item in query)
{
Console.WriteLine("{0} occurred {1} time(s)", item.Value, item.Count);
}
Для совпадений с несколькими символами, которые правильно подсчитали бы вхождения «12», класс Regex
пригодится:
var query = list.Select(s => new
{
Value = s,
Count = Regex.Matches(input, s).Count
});