获取字符串中包含的实例列表中的计数

时间:2011-07-08 14:13:16

标签: c# .net linq lambda

我有一个包含最多9个唯一数字的字符串,从1到9(myString),例如“12345”

我有一个字符串列表{“1”},{“4”}(myList)..等等。

我想知道字符串(myString)中有多少实例包含在列表中(myList),在上面的示例中,这将返回2.

类似

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

如果需要,我可以将myString更改为列表。

非常感谢

6 个答案:

答案 0 :(得分:8)

我会尝试以下方法:

count = mylist.Count(s => myString.Contains(s));

答案 1 :(得分:5)

您所需要的并不完全清楚,但这些选项可能有所帮助:

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

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

第一个将返回列表中与您的字符串相同的字符串数,第二个将返回包含您的字符串数。如果两者都不起作用,请更清楚地说明问题。

答案 2 :(得分:1)

如果myList只是List<string>,那么这应该有效:

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

如果myListList<List<string>>

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

答案 3 :(得分:0)

这是一种方法,但它仅限于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
                });

答案 4 :(得分:0)

尝试

count = myList.Count(s => s==myString);

答案 5 :(得分:0)

尝试

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

这仅在myList中的项目是单个数字时才有效

编辑,因为您可能已经注意到这会将myString多次转换为char数组,因此最好有

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