class SampleClass
{
public string Name {get; set;}
}
我有一个Sample类元素列表 -
var sampleClass = new SampleClass(Name = "HelloStackOverflow");
var sampleClass1 = new SampleClass(Name = "HelloStackOverflow");
var sampleClassWithDigit = new SampleClass(Name = "HelloStackOverflow1");
var listWithString = new List<SampleClass>();
listWithString.Add(sampleClass);
listWithString.Add(sampleClass1);
listWithString.Add(sampleClassWithDigit);
其中2个元素包含完全相同的短语 - &#34; HelloStackOverflow&#34;
最后一个有相同的短语,但它的结尾带有数字 - &#34; HelloStackOverflow1&#34;
我希望能够计算单词HelloStackOverflow和同一个单词但在末尾有数字的次数列在列表中的次数
var countNumber = listWithString.Where(x => x.Name.Contains("HelloStackOverflow")).Count();
上面的Lambda只获得与Coitans()中的模式完全匹配的前2个元素。 是否可能再次使用一些Lambda或一些表达式来匹配具有相同名称的元素/如前两个,但每次都以数字结尾并获得它们的Count() - HelloStackOverflow和HelloStackOverflow中有多少个元素HelloStackOverflow1?
答案 0 :(得分:0)
如果您尝试获取2个单独的计数器,一个计算包含HelloStackOverflow
的实例数,然后包含HelloStackOverflow
后面跟一个数字的数量,则可以使用正则表达式:
var listWithString = new List<string> {"HelloStackOverflow", "HelloStackOverflow", "HelloStackOverflow9"};
var justTextCount = listWithString.Count(x => x.Contains("HelloStackOverflow"));
var textWithNumberCount = listWithString.Count(x => Regex.IsMatch(x, @"HelloStackOverflow\d+"));
答案 1 :(得分:0)
HelloStackOverflow和HelloStackOverflow9有多少元素
如果我正确理解了您的问题,那么您可以使用GroupBy
获取每个项目的出现次数:
Dictionary<string, int> occurences = listWithString
.GroupBy(item => item)
.ToDictionary(grouping => grouping.Key, grouping => grouping.Count());
您将获得一个字典,其中列表项作为键,并且出现的次数为值,因此在您的示例中它将是:
HelloStackOverflow -> 2
HelloStackOverflow9 -> 1