Получить счетчик в списке экземпляров, содержащихся в строке - PullRequest
3 голосов
/ 08 июля 2011

У меня есть строка, содержащая до 9 уникальных чисел от 1 до 9 (myString), например. "12345"

У меня есть список строк {"1"}, {"4"} (myList) .. и т. Д.

Я хотел бы знать, сколько экземпляров в строке (myString) содержится в списке (myList), в приведенном выше примере это вернет 2.

так что-то вроде

count = myList.Count(myList.Contains(myString));

Я мог бы изменить myString на список, если это необходимо.

Большое спасибо

Джо

Ответы [ 6 ]

8 голосов
/ 08 июля 2011

Я бы попробовал следующее:

count = mylist.Count(s => myString.Contains(s));
5 голосов
/ 08 июля 2011

Не совсем понятно, что вам нужно, но вот некоторые варианты, которые могут помочь:

myList.Where(s => s == myString).Count()

или

myList.Where(s => s.Contains(myString)).Count()

первый вернет число строк всписок, который совпадает с вашим, второй будет возвращать количество строк, которые содержат ваш.Если ни одна из них не работает, просьба прояснить ваш вопрос.

1 голос
/ 08 июля 2011

Если myList просто List<string>, то это должно работать:

int count = myList.Count(x => myString.Contains(x));

Если myList равно List<List<string>>:

int count = myList.SelectMany(x => x).Count(s => myString.Contains(s));
0 голосов
/ 08 июля 2011

try

var count = myList.Count(x => myString.ToCharArray().Contains(x[0]));

это будет работать, только если элемент в myList представляет собой одну цифру

Редактировать: , как вы, вероятно, заметили, преобразует myString вмассив символов несколько раз, поэтому было бы лучше иметь

var myStringArray = myString.ToCharArray();
var count = myList.Count(x => myStringArray.Contains(x[0]));
0 голосов
/ 08 июля 2011

Попробуйте

count = myList.Count(s => s==myString);
0 голосов
/ 08 июля 2011

Это один из подходов, но он ограничен 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
                });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...