如何更高效统计字符串中从9降序查找的指定数字的出现次数
实现方案
基础循环实现(可读性最高,性能最优)
直接从9倒序遍历到1,匹配到第一个存在的数字后直接统计次数执行业务逻辑即可,完全不需要冗余的分支判断。你原有代码外层的foreach遍历是冗余的,统计整个字符串中指定字符的出现次数不需要逐个遍历外层字符,该实现已经去掉了该冗余逻辑:
string test = "987652349"; int count = 0; // 从9开始向下遍历到1 for (int num = 9; num >= 1; num--) { char target = num.ToString()[0]; if (test.Contains(target)) { count = test.Count(c => c == target); // 此处写入你的后续业务逻辑 break; // 匹配到最高优先级的数字后直接终止循环 } }
LINQ 简洁写法
如果偏好函数式写法,可以用LINQ完成逻辑,注意如果存在字符串中完全没有1-9的场景,可把First改为FirstOrDefault,后续加空判断即可:
string test = "987652349"; var (targetNum, count) = Enumerable.Range(1, 9) .Reverse() .Select(n => (n, test.Count(c => c == n.ToString()[0]))) .First(res => res.Item2 > 0); // 此处写入你的后续业务逻辑
方案优势
- 无冗余分支代码,逻辑清晰易维护,需要调整查找范围(比如改从8开始、或者查到0为止)只需要修改遍历的起止值即可
- 性能优于原有写法:原有写法每次
Contains和Count都会单独遍历字符串,该方案匹配到第一个符合条件的数字就终止操作,减少不必要的遍历 - 不存在漏判风险:原有手写if分支如果漏写某个数字就会出现逻辑漏洞,循环实现完全避免了该问题
内容的提问来源于stack exchange,提问作者xvirtue
相关产品推荐
相关产品推荐

