C#如何判断字符串数组中所有字符串的长度是否相同
检测字符串数组所有元素是否等长的实现方案
现有代码的问题
你当前的实现存在三个核心问题:
- 比较基准错误:代码中拿每个字符串的
Length和数组本身的元素个数words.Length做对比,和「所有字符串元素长度一致」的需求完全不符,正确逻辑应该是拿所有元素和同一个字符串长度基准做对比,而非和数组长度比。 - 结果判断逻辑错误:循环中每次都会覆盖
result的值,最终返回的只是最后一个元素的长度和数组长度的比较结果,前面所有元素的判断结果都会被丢弃,完全没有起到遍历校验的作用。 - 缺失边界处理:没有考虑空数组、null数组、单元素数组的场景,也没有考虑数组内存在null元素引发空引用异常的可能。
正确实现写法
基础循环写法(无额外依赖,性能最优)
逻辑直接:先处理边界场景,再取第一个元素的长度作为基准,遍历过程中只要发现长度不匹配的元素直接返回false,不需要跑完整个循环,提前终止减少不必要的计算。
public static bool AllStringsSameLength(string[] words) { // null数组、空数组、单元素数组天然满足所有元素等长 if (words == null || words.Length <= 1) { return true; } // 取第一个元素长度作为基准,业务允许null的话可以改成words[0]?.Length int targetLength = words[0].Length; // 从第二个元素开始遍历校验 for (int i = 1; i < words.Length; i++) { // 业务允许null的话判断条件改成 words[i]?.Length != targetLength if (words[i].Length != targetLength) { return false; } } return true; }
LINQ简洁写法
如果项目允许使用LINQ(需要引入System.Linq命名空间),可以用更简洁的写法实现,逻辑和基础循环版完全一致:
using System.Linq; public static bool AllStringsSameLength(string[] words) { // 业务允许null的话判断条件改成 s?.Length == words[0]?.Length return words == null || words.Length <= 1 || words.All(s => s.Length == words[0].Length); }
基础循环写法在超长数组场景下性能略优,LINQ写法可读性更高、代码更简洁,可以根据项目实际场景选择。
内容的提问来源于stack exchange,提问作者MjSudo
相关产品推荐
相关产品推荐

