2017-06-27 43 views
-4
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的元素包含完全相同的短語 - 「HelloStackOverflow」

最後一個有相同的短語,但其結尾的數字 - 「HelloStackOverflow1」

我希望能夠計算多少次單詞HelloStackOverflow和同一個單詞,但與d igit在端部被呈現在列表

var countNumber = listWithString.Where(x => x.Name.Contains("HelloStackOverflow")).Count(); 

拉姆達以上僅得到第一2個元素是完全匹配與所述Coitans)的圖案(。 可能再次使用某些Lambda或某種表達式來匹配與第2個元素具有相同名稱的元素,而且每次都以數字結尾並獲取它們的Count() - HelloStackOverflow有多少個元素和HelloStackOverflow1?

+0

你要算'HelloStackOverflows '? 'HelloStackOverflow12'? 'HelloStackOverflow0'? – mjwills

+2

對我來說,它看起來像你正在收到[3項目](https://dotnetfiddle.net/wFDChk) – Icepickle

+0

'Contains'應該爲此工作,如果它匹配確切的字符串,它會'==' – EpicKip

回答

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+")); 
0

多少元素HelloStackOverflow和HelloStackOverflow9

如果我理解你的問題正確,則你可以出現使用GroupBy每個項目的數量:

Dictionary<string, int> occurences = listWithString 
      .GroupBy(item => item) 
      .ToDictionary(grouping => grouping.Key, grouping => grouping.Count()); 

你會得到與列表項的密鑰和OCCURENCES作爲值數的字典,以便在你的例子將是:

HelloStackOverflow -> 2 
HelloStackOverflow9 -> 1