我正尝试使用-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
运算符似乎对数组不友好,我是否必须做完全不同的事情。
答案 0 :(得分:1)
我认为您的意思是使用更多关键字来获取可变长度数组的输出。
在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