Сортировка массива Powershell в многомерный массив с «-подобным» оператором сравнения - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь собрать свой массив в многомерный массив, используя оператор сравнения -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 не выглядит дружественным для массива.

1 Ответ

0 голосов
/ 15 января 2019

Я думаю, вы хотите получить выходные данные для массива переменной длины, используя больше ключевых слов.
В комментариях 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...