arrays - 从数组创建对象

标签 arrays object powershell powershell-2.0

我有一个数据字符串,我将其变成数组:

$cfg_data = @(
"AppName1,data1",
"AppName2,data2"    
) 

然后,我运行一个foreach查询以一次在每一行上工作:
FOREACH($a in $cfg_data)
{
    $dataSplit = $a -split"(,)"
    $AppN = $dataSplit[0]
    $AppD = $dataSplit[2]

    #Do stuff here
}

但我想将其从字符串转换为对象,以便添加/删除其他项,
然后再运行一些foreach语句,在我进行更新时更新不同的位。

我到目前为止:
FOREACH($a in $cfg_data)
{
    $dataSplit = $a -split"(,)"
    $AppN = $dataSplit[0]
    $AppD = $dataSplit[2]

        $objHere = @(
            @{ 
                appItem = "$AppN";
                appData = "$AppD";
             }) 
}

但是当我检查$objHere时,它只是其中的最后一个条目(AppName2,datat2)

我尝试添加:
$b=0


$objHere[$b]

但后来我明白了
Array assignment failed because index '1' was out of range.

正确的方法是什么?

最佳答案

通过在循环中声明$objHere,可以覆盖每次迭代的值。您需要在循环外部初始化一个空数组,然后从循环内部将其追加:

$objHere = @()

foreach($a in $cfg_data)
{
    $dataSplit = $a -split"(,)"
    $AppN = $dataSplit[0]
    $AppD = $dataSplit[2]

    $objHere += 
        @{ 
           appItem = "$AppN";
           appData = "$AppD";
         }
}

另外,您实际上不是在创建对象,而是在创建哈希表。如果您想创建一个对象,则可以执行以下操作:

$objHere = @()

foreach($a in $cfg_data)
{
    $dataSplit = $a -split"(,)"
    $AppN = $dataSplit[0]
    $AppD = $dataSplit[2]
    $objHere += New-Object PSObject -property @{appItem = "$AppN";appData = "$AppD";}
}

给予:

appItem  appData
-------  -------
AppName1 data1
AppName2 data2

关于arrays - 从数组创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27188254/

相关文章:

javascript - Powershell 无法扩展此 javascript 内容

excel - 使用Powershell将Excel中的文本转换为数字

javascript - 如何在 JavaScript 中将所有数组值填充到单个索引

ruby-on-rails - rails从哈希数组中选择最大值

c++ - 在 C++ 中存储对数组的引用

JavaScript : Adding a method to a parent class/to be inherited

php - 将数组作为 url 参数传递

javascript - 从对象 "this"javascript 获取信息

json - 如何展开 JSON 对象?

powershell - Powershell-全局设置-server标志(AD cmdlet)