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

IndexOfShares

时间:2023-04-10 16:08:54 C#

withCustomStringComparer无需大量扩展方法即可实现的方法,如果这些方法可行的话。这是我制作的比较器。它大致基于以下建议:ImplementacustomIComparerwithstrings另请注意,ModifyString是一个WIP。根据我比较的输入,我希望在其中添加更多内容。我也知道它很贵,但我只是在寻找解决方案ATM,而不是性能。公共类CustomComparer:StringComparer{publicoverrideintCompare(stringx,stringy){returnStringComparer.Ordinal.Compare(ModifyString(x),ModifyString(y));}publicoverrideboolEquals(stringx,stringy){if(ModifyString(x).Equals(ModifyString(y)))返回真;否则返回假;}publicoverrideintGetHashCode(stringobj){if(obj==null)return0;否则返回ModifyString(obj).GetHashCode();}privatestringModifyString(strings){//我知道这段代码很昂贵/天真,欢迎您提出建议。s=s.ToLowerInvariant();s=s.Trim();s=Regex.Replace(s,@"s+","");//用一个空格替换所有空白字符。返回s;使用方便的IEnumerable扩展似乎已经应该了,您可以编写一个String扩展来使用StringComparer。正如评论中所建议的,所有可能的子字符串长度都在每个位置进行了测试,因为不能对自定义StringComparer做出任何假设。以上就是C#学习教程分享的全部内容:IndexOf和自定义StringComparer。如果对你有用,需要进一步了解C#学习教程,希望你多多关注——(aT=>testFn(aT)).DefaultIfEmpty(defval).First();}publicstaticclassStringExt{publicstaticintIndexOf(thisstringsource,stringmatch,StringComparersc){returnEnumerable.Range(0,source.Length)//对于字符串中的每个位置.FirstOrDefault(i=>//find第一个位置//match在此位置等于匹配长度(或到字符串末尾)或sc.Equals(source.Substring(i,Math.Min(match.Length,source.Length-i)),match)||//匹配等于从该位置开始的子字符串中的一个Enumerable.Range(1,source.Length-i-1).Any(ml=>sc.Equals(source.Substring(i,ml),match)),-1//否则如果没有位置匹配则返回-1);}}本文收集自网络,不代表表态,如涉及侵权,请点击右侧联系管理员删除如转载请注明出处: