First of all, run your lines in sequence with the number of matches:
myStrings.Select(x => x.Count(x => x == '#'))
Then select the maximum value:
int maximum = myStrings
.Select(s => s.Count(x => x == '#'))
.Max();
Make an extension method:
public static int CountMaximumOccurrencesOf(this IEnumerable<string> strings, char ch)
{
return strings
.Select(s => s.Count(c => c == ch))
.Max();
}
HOWEVER. # char , . , : Unicode ?, . "Unicode aware", ( , , ):
private static IEnumerable<string> EnumerateCharacters(string s)
{
var enumerator = StringInfo.GetTextElementEnumerator(s.Normalize());
while (enumerator.MoveNext())
yield return (string)enumerator.Value;
}
:
public static int CountMaximumOccurrencesOf(this IEnumerable<string> strings, string character)
{
return strings
.Select(s => s.EnumerateCharacters().Count(c => String.Equals(c, character, StringComparison.CurrentCulture))
.Max();
}
, Max() , ( DefaultIfEmpty(), ). , ( , 0), :
public static int CountOccurrencesOf(this IEnumerable<string> strings,
string character,
StringComparison comparison = StringComparison.CurrentCulture)
{
Debug.Assert(character.EnumerateCharacters().Count() == 1);
return strings
.Select(s => s.EnumerateCharacters().Count(c => String.Equals(c, character, comparison ));
}
:
var maximum = myStrings.CountOccurrencesOf("#").Max();
:
var maximum = myStrings.CountOccurrencesOf("Γ ", StringComparison.CurrentCultureIgnoreCase)
.Max();
, , (en-US), , , StringComparison.InvariantCulture. , String.Normalize() .