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

PowerShell从CSV创建交错数组时遇到问题求助

问题分析

你的代码存在几个关键问题:

  • 未初始化$Devices数组,直接通过索引赋值会引发空引用错误
  • for循环中使用$_无效,$_仅在管道(如ForEach-Object)中代表当前对象,这里应该用$deviceImport[$i]访问当前行
  • 错误使用+=赋值,交错数组需要先创建子数组再添加到主数组
解决方案

如果你需要将每行数据的指定字段(如Id和Name)作为单独子数组存入交错数组,可使用以下代码:

# 导入CSV数据
$deviceImport = Import-Csv ".\ValidatedData.csv"

# 初始化存储交错数组的变量
$Devices = @()

# 遍历每一行数据
foreach ($device in $deviceImport) {
    # 将当前行的指定字段创建为子数组,添加到主数组
    $Devices += @($device.Id, $device.Name)
}

如果需要保留每行的所有字段作为子数组,可改为:

$deviceImport = Import-Csv ".\ValidatedData.csv"
$Devices = @()

foreach ($device in $deviceImport) {
    # 将当前行的所有属性值提取为数组
    $rowArray = $device.PSObject.Properties.Value
    $Devices += ,$rowArray  # 逗号确保将数组作为单个元素添加,而非展开
}
关键说明
  • 使用foreach循环比for循环更直观,无需手动处理索引,避免索引错误
  • 用,$rowArray的方式添加子数组,能确保子数组作为交错数组的一个元素存在,而不是将子数组的元素展开到主数组中
  • 对于20000行数据,这种方式效率足够,若追求极致性能可预先指定数组大小:$Devices = New-Object 'System.Object[][]' $deviceImport.Count,再通过索引赋值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 08:47:41