You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优雅检查所有数组的Count是否一致?含空数组处理需求

优雅实现数组校验与逐元素处理

一、统一检查数组长度匹配(含Null处理)

你可以通过将所有数组放入集合,结合LINQ简化长度校验逻辑,同时处理Null情况:

// 包含所有待校验的数组(可扩展至8个)
var arrays = new[] { array1, array2, array3, /* ... 其余5个数组 */ };

// 处理Null:将Null数组视为空数组(长度0),也可根据需求改为判定为无效
var validArrays = arrays.Select(arr => arr ?? Array.Empty<string>()).ToArray();

// 检查所有数组长度是否一致
bool allLengthsMatch = validArrays.Select(arr => arr.Length).Distinct().Count() == 1;

如果Null数组本身就属于异常情况,可以提前判断:

if (arrays.Any(arr => arr == null) || !allLengthsMatch)
{
    // 存在Null数组或长度不匹配,停止处理
}

二、整合三个停止条件的逐元素处理

结合你补充的三个停止条件,需要按索引逐个验证,触发任一条件则终止后续处理。以下是完整实现:

步骤说明

  1. 将逗号分隔字符串分割为数组,处理空输入/Null的情况
  2. 统一将Null数组转为空数组,避免空引用异常
  3. 以最短数组长度为边界,逐个索引检查三个条件
  4. 触发条件则立即停止循环

示例代码

// 模拟8个逗号分隔输入(示例仅展示3个,其余可同理扩展)
string inputName = "Tom,Mary,Jerry";
string inputAge = "10,11,12";
string inputGender = "male,Error";

// 分割字符串为数组,空输入转为Null,再统一处理为非Null数组
var nameArray = string.IsNullOrEmpty(inputName) ? null : inputName.Split(',');
var ageArray = string.IsNullOrEmpty(inputAge) ? null : inputAge.Split(',');
var genderArray = string.IsNullOrEmpty(inputGender) ? null : inputGender.Split(',');

var allArrays = new[] { nameArray, ageArray, genderArray /* ... 其余5个数组 */ }
    .Select(arr => arr ?? Array.Empty<string>())
    .ToArray();

// 取最短数组长度作为最大可遍历索引边界
int maxProcessIndex = allArrays.Min(arr => arr.Length);

for (int i = 0; i < maxProcessIndex; i++)
{
    // 检查条件2:当前索引存在空元素
    bool hasEmptyElement = allArrays.Any(arr => string.IsNullOrEmpty(arr[i]));
    // 检查条件3:当前索引存在'Error'元素
    bool hasErrorElement = allArrays.Any(arr => arr[i] == "Error");

    if (hasEmptyElement || hasErrorElement)
    {
        // 触发停止条件,终止后续处理
        break;
    }

    // 处理当前有效记录
    Console.WriteLine($"处理记录:姓名={nameArray[i]}, 年龄={ageArray[i]}, 性别={genderArray[i]}");
}

示例运行结果

针对你提供的测试数据:

var nameArray = new string[] {"Tom","Mary","Jerry"};
var ageArray = new string[] {"10","11","12"};
var genderArray = new string[] {"male","Error"};

代码只会输出:处理记录:姓名=Tom, 年龄=10, 性别=male。索引1时genderArray[1]为Error触发停止,索引2因genderArray长度不足,不会进入循环处理。

三、复用性优化:封装校验方法

如果需要多次复用校验逻辑,可以封装为单独方法:

private static bool CanProcessElement(string[][] arrays, int index)
{
    return arrays.All(arr => index < arr.Length) 
           && !arrays.Any(arr => string.IsNullOrEmpty(arr[index])) 
           && !arrays.Any(arr => arr[index] == "Error");
}

调用时简化循环:

int maxIndex = allArrays.Min(arr => arr.Length);
for (int i = 0; i < maxIndex; i++)
{
    if (!CanProcessElement(allArrays, i))
        break;
    // 处理当前记录
}

内容的提问来源于stack exchange,提问作者gymcode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 08:01:22