当前位置: 首页 > 编程语言 > C#

字符串数组中一个字符的最大出现次数分享

时间:2023-04-11 03:09:50 C#

C#中一个字符在字符串数组中的最大出现次数,给定一个数组:string[]myStrings=newstring[]{"test#test","##test","######",//获胜者(输出6)};如何找到字符#在单个字符串中出现的最大次数?我目前的解决方案是:intmaxOccurrences=0;foreach(varmyStringinmyStrings){varoccurrences=myString.Count(x=>x=='#');如果(出现次数>maxOccurrences){maxOccurrences=出现次数;}}返回maxOccurrences;是否可以使用linq直接在myStrings[]数组上执行myStrings[]?这可能是一种适用于任何IEnumerable的扩展方法吗?首先让我们将您的字符串转换为一系列匹配计数:myStrings.Select(x=>x.Count(x=>x=='#'))//{1,2,6}在您的示例中然后选择最大值值:intmaximum=myStrings.Select(s=>s.Count(x=>x=='#')).Max();//6在你的例子中让我们做一个扩展方法:;然而,有一个大问题。你在C#中所说的char并不是你在你的语言中所说的字符。这已在其他帖子中进行了广泛讨论,例如:Fastestwaytosplitlargetextintosmallerchunks和HowtoperformUnicoderecognitioncharactersbycharactercomparison?好吧,我不会在这里重复所有内容。为了“识别Unicode”,你需要让你的代码更复杂(注意,代码写在这里,然后是未经测试的):());while(enumerator.MoveNext())yieldreturn(string)enumerator.Value;}然后把我们原来的代码改成:publicstaticintCountMaximumOccurrencesOf(thisIEnumerablestrings,stringcharacter){returnstrings.Select(s=>s.EnumerateCharacters().Count(c=>String.Equals(c,character,StringComparison.CurrentCulture)).Max();}请注意,Max()单独要求集合不为空(如果集合可能是错误且不是错误,请使用DefaultIfEmpty())。为了不武断地决定在这种情况下要做什么(如果应该发生异常则抛出异常或只返回0),您可以降低此方法的专门性并将此责任留给调用者:publicstaticintCountOccurrencesOf(thisIEnumerablestrings,stringcharacter,StringComparison比较=StringComparison.CurrentCulture){Debug.Assert(character.EnumerateCharacters().Count()==1);returnstrings.Select(s=>s.EnumerateCharacters().Count(c=>String.Equals(c,character,comparison));}像这样使用:varmaximum=myStrings.CountOccurrencesOf("#").Max();如果你需要它不区分大小写:varmaximum=myStrings.CountOccurrencesOf("à",StringComparison.CurrentCultureIgnoreCase).Max();你现在可以想象这种比较不仅限于一些深奥的语言,它适用于不变文化(en-US),然后必须始终使用不变文化来比较字符串,您应该指定StringComparison.InvariantCulture。不要忘记您可能还需要为输入字符调用String.Normalize()可以这样写,注意DefaultIfEmpty的用法,如果myStrings为空,不会抛出异常,而是会恢复为0。varmaximum=myStrings.Select(e=>e.Count(ee=>ee=='#')).DefaultIfEmpty().Max();可以用LinqwithRegex:以上是C#学习教程:字符字符串数组中最大出现次数分享的全部内容,如果对你有用还需要了解更多C#学习教程,希望大家多多指教多加注意——myStrings.Select(x=>Regex.Matches(x,"#").Count).max();本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: