簡體   English   中英

為什么這個數組屬性不會填充

[英]Why won't this array property populate

我有兩個具有一些共享數據的多維 arrays。 兩個 arrays 之間的元素順序不同,屬性名稱也不是在每個實例中都匹配。 但是,要比較的字段將始終具有相同的名稱(即 Array1 中的 $Asset 和 $Array2 中的 $Name)。 我想要的是在 Array2 中存在部分匹配時填充 Array1 中的屬性。 下面是一個例子。

$Array1 = @(
    @{Asset = '123'; Region = 'Earth'; User = ''}
    @{Asset = '098'; Region = 'Moon'; User = 'Carla'}
    )


$Array2 = @(
    @{Name= '123456'; User = 'Steve'; Date = '1/1/22'}
    )

我想要的是讓腳本找到部分匹配項 (123),並在此基礎上用“Steve”填充 $Array1.user。 對於 ForEach 循環來說,這似乎應該是一件容易的事,但我不知道該怎么做。 以下是我嘗試過的一些示例。

ForEach ($Comp in $Array1)
{
    $Array2 -like "*$Comp*"
    $Comp.user = ($Array2).user
  }

_______________

ForEach ($Comp in $Array1)
{
     $Comp -match $Array2
     $Comp.user = $($Array2).user
} 

   

我嘗試了嵌套 ForEach 循環、ForEach 循環與 If 語句等的不同組合。我確信這是一個簡單的修復,但我是 PS 的新手,沒有看到我的問題。 能否請你幫忙? 這是唯一讓我的腳本不完整的東西。

提前致謝!

只是為了首先澄清一些術語,你實際上並沒有多維 arrays - 你會用$x = new-object "string[,]" 2, 2類的東西聲明它們,然后你必須將每個值插入數組單獨初始化它$x[0, 0] = "aaa"; $x[0, 1] = "bbb"; ... etc $x[0, 0] = "aaa"; $x[0, 1] = "bbb"; ... etc

真正得到的是兩個一維 arrays,其中數組中的每一項都是一個哈希表。

話雖如此,一個簡單的方法來做你想做的事是使用這個命令式代碼片段:

# set up some test data
$Array1 = @(
    @{ "Asset" = "123"; "Region" = "Earth"; "User" = "" },
    @{ "Asset" = "098"; "Region" = "Moon";  "User" = "Carla"}
)
$Array2 = @(
    @{ "Name" = "123456"; "User" = "Steve"; "Date" = "010/1/22" }
)

# update the user details
foreach( $item1 in $Array1 )
{
    foreach( $item2 in $Array2 )
    {
        if( $item2.Name -like "$($item1.Asset)*" )
        {
            $item1.User = $item2.User
        }
    }
}

# show the result
$Array1 | ConvertTo-Json
# [
#   {
#     "Region": "Earth",
#     "User": "Steve",     # <-- was "", is now "Steve"
#     "Asset": "123"
#   },
#   {
#     "Region": "Moon",
#     "User": "Carla",
#     "Asset": "098"
#   }
# ]

嵌套的foreach循環基本上將$Array1中的每個項目與$Array2中的每個項目進行比較,並在if表達式為真時更新$Array1中的項目。

管道可能有一些稍微靈活的方法,但上面的代碼完成了工作:-)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM