簡體   English   中英

Powershell使用“ -like”比較運算符將數組排序為多維數組

[英]Powershell sorting array into multi-dimensional array with the “-like” comparison operator

我正在嘗試通過使用-like比較運算符將我的數組收集到多維數組中,以進行進一步處理。

我編寫了以下數組循環,但無法將"*kw1*"替換為"*$keyword[$j]*" 它將破壞操作員的驗證。

$keywords = @("kw1", "kw2")
$list = @("name_kw1_000", "name_kw1_001", "name_kw1_002", "name_kw2_000", "name_kw2_001", "name_kw2_002")


$mdarr= New-Object object[][] $keywords.Length
for ($i = 0; $i -lt $list.Length; ++$i) {
    for ($j = 0; $j -lt $keywords.Length; ++$j) {
        if ( $list[$i] -like "*kw1*" ) {
            $mdarr[$j] += $list[$i];
        }
    }
}

我的預期輸出是:

$mdarr[0]
name_kw1_000
name_kw1_001
name_kw1_002
$mdarr[1]
name_kw2_000
name_kw2_001
name_kw2_002

上面的數組循環是否可能做到這一點,或者我必須做完全不同的事情,因為-like運算符似乎對數組不友好。

我認為您的意思是使用更多關鍵字來獲取可變長度數組的輸出。
作為montonero注釋,您永遠不會測試關鍵字是否實際上是單詞列表中項目的一部分。

也許這會有所幫助:

# there is no need to enclose the items with '@()'
$keywords = "kw1", "kw2"
$list = "name_kw1_000", "name_kw1_001", "name_kw1_002", "name_kw2_000", "name_kw2_001", "name_kw2_002"

# in case your keywords contain characters that have special meaning
# for regex '-match', we should escape these characters.
$keywords = $keywords | ForEach-Object { [RegEx]::Escape($_) }

# fill the object array
$mdarr= New-Object object[][] $keywords.Count
for ($i = 0; $i -lt $keywords.Count; $i++) {
    foreach ($item in $list) {
        if ($item -match $keywords[$i]) {
            $mdarr[$i] += $item
        }

    }
}

# write result
for ($i = 0; $i -lt $mdarr.Count; $i++) {
    Write-Host ("`$mdarr[$i]") -ForegroundColor Yellow
    $mdarr[$i]
}

這將輸出

 $mdarr[0] name_kw1_000 name_kw1_001 name_kw1_002 $mdarr[1] name_kw2_000 name_kw2_001 name_kw2_002 

暫無
暫無

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

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