如何高效识别字符串数组内的数值并统计其中奇数的数量?
优化字符串中奇数统计的方案
嗨,我来帮你搞定这个字符串奇数统计的优化问题~ 你之前想用嵌套循环手动切割字符串的方法确实有点繁琐,而且硬编码循环次数(比如固定5次)的扩展性也很差,下面给你几个更高效简洁的思路:
方案一:按空格分割后遍历统计(最推荐)
既然你的字符串是用空格分隔数字的,直接用字符串分割方法把所有数字拆出来,再逐个判断奇偶就行,完全不需要手动处理索引切割:
// 假设你的输入字符串是这样的 string numString = "37 42 44 61 62"; // 按空格分割,同时去掉可能的空字符串(比如首尾空格) string[] numStrArray = numString.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries); // 统计奇数个数 int oddCount = 0; foreach (string s in numStrArray) { if (int.TryParse(s, out int num) && num % 2 != 0) { oddCount++; } } // 或者用LINQ更简洁 // int oddCount = numStrArray.Count(s => int.TryParse(s, out int num) && num % 2 != 0);
这个方法的好处:
- 不需要硬编码数字数量,哪怕字符串里的数字变多/变少,代码都不用改
- 逻辑清晰,比嵌套循环切割可读性高太多
- 用
int.TryParse还能避免字符串里出现非数字内容导致的报错,更健壮
方案二:如果数字数量固定(比如就是5个),简化切割逻辑
如果你确定字符串里一定是5个数字,也可以不用嵌套循环,直接按空格分割后直接取对应元素判断,但本质上还是分割的思路,比手动切割索引简单:
string numString = "37 42 44 61 62"; string[] nums = numString.Split(' '); int oddCount = 0; // 直接遍历分割后的数组,不用嵌套循环 foreach (string numStr in nums) { int num = int.Parse(numStr); if (num % 2 != 0) oddCount++; }
为什么不推荐原来的嵌套循环切割?
原来的嵌套循环手动切割的问题在于:
- 需要手动计算每个数字的起始和结束索引,容易出错(比如空格位置变化就会导致切割错误)
- 硬编码了5次循环,扩展性差,要是以后数字数量变了,就得改循环次数
- 代码可读性低,别人看半天才能明白你在做什么
所以不管从哪个角度看,用字符串分割的方法都比手动切割索引高效得多~
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

