gpt4 book ai didi

powershell - 如何动态填充多维数组?

转载 作者:行者123 更新时间:2023-12-03 01:04:53 25 4
gpt4 key购买 nike

我正在尝试创建一个 n * m 矩阵,该矩阵将完成以下设计:

  • 导入CSV,其中包含成对的应用程序名称和项目名称。
  • 生成一个n * m矩阵,该矩阵是根据动态命名和生成的数组构建的,其第一个值为项目名称。
  • 将应用程序和项目的每种可能组合与原始CSV进行比较,并为存在或不存在的每个比较使用真或假语句填充矩阵。

  • 我正在使用的第一个循环返回一个我不理解的错误,即动态生成的数组名称已经存在。

    代码:
    $Source = (Import-Csv "C:\Users\m012407\Desktop\DataBase 42\DB--Data\APPcsv - Copy.csv" -Delimiter ";" -Header ("Application", "Project"))

    # An Array to hold each project by name.
    $projectName = $source | Select-Object Project -Unique
    $ProjectArray = @("")
    foreach ($project in $projectname) {
    $ProjectArray += $Project.Project
    }

    # An Array to hold each application by name.
    $ApplicationName = $source | Select-Object Application -Unique
    $ApplicationArray = @()
    foreach ($App in $ApplicationName) {
    $ApplicationArray += $App.Application
    }

    # An Array to hold the Combined values of each EXISTING application and project combination.
    $ComparisonArray = @()
    $ComparisonSource = foreach ($Value in $Source) {
    $ComparisonString = $Value.Project + $Value.Application
    $ComparisonArray += $ComparisonString
    }

    # The Matrix, eventually n*m as each dynamically generated array is added to it
    $Matrix = @()

    ##loop1 Now defunct
    #for ($iP = 0; $iP -le $ProjectArray.count; $iP ++) {
    # New-Variable -Name Row$iP -Value @($ProjectArray[$iP])
    # $Matrix += $_
    #}

    该代码当然还没有完成,但是在测试期间,它反复无法以我可以调用矩阵和显示的方式将 Row$iP数组正确添加到矩阵中。错误消息指出变量 row$iP(对于每个尝试行,为1-20)已经存在。

    我一直在网上搜索其他帖子和指南,但不确定我所做的事情会妨碍我目前的工作。显然,我缺少一些基本知识或尚未完全理解的东西,因此,我们将不胜感激。

    在Ansgar Wiechers的帮助下,我对代码进行了一些修改以使其可以在此电机上运行:
    $Matrix = New-Object 'Object[,]' $ProjectArray.Count, $ApplicationArray.Count

    for ($i=0; $i -lt $ProjectArray.Count; $i++) {
    for ($j=0; $j -lt $ApplicationArray.Count; $j++) {
    $Matrix[$i, $j] = $ProjectArray[$i] + $ApplicationArray[$j]
    if ($Matrix[$i, $j] -match $comparisonArray) {
    $Matrix[$i, $j] = $True
    } else {
    $Matrix[$i, $j] = $False
    }
    }
    }

    不幸的是,使矩阵的每个值都为假。
    不过,我会继续使用它。

    最佳答案

    一方面,我将简化$ProjectArray$ApplicationArray的创建:

    $ProjectArray     = @($source | Select-Object -Expand Project -Unique)
    $ApplicationArray = @($source | Select-Object -Expand Application -Unique)

    另外,您创建的内容称为“锯齿状”数组(基本上是每个具有一个维的数组),它与二维数组(一个具有2维的数组对象)不同。对于您的矩阵,最好创建一个实际的二维数组:
    $Matrix = New-Object 'Object[,]' $ProjectArray.Count, $ApplicationArray.Count

    这将使您可以像这样填充矩阵:
    $source | ForEach-Object {
    $row = $ProjectArray.IndexOf($_.Project)
    $col = $ApplicationArray.IndexOf($_.Application)

    $Matrix[$row, $col] = $true
    }

    空字段被解释为false,或者您可以在处理 $false的元素之前使用 $source值初始化矩阵:
    for ($i=0; $i -lt $ProjectArray.Count; $i++) {
    for ($j=0; $j -lt $ApplicationArray.Count; $j++) {
    $Matrix[$i, $j] = $false
    }
    }

    关于powershell - 如何动态填充多维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50758611/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com