Powershell: найти количество вхождений определенного числового значения из массива целых чисел

У меня есть целочисленный массив, как показано ниже, и я хотел подсчитать количество единиц в этом массиве в powershell. Может ли кто-нибудь помочь мне здесь, пожалуйста,

[array]$inputs = 81,11,101,1811,1981
$count = 0
foreach($input in $inputs)
{       
Write-Host "Processing element $input"
$count += ($input -like "*1*" | Measure-Object).Count 
}
Write-Host "Number of 1's in the given array is $count"

Это дает мне только 5 единиц в этом массиве, но ожидаемый ответ равен 10. Буду признателен за любую помощь.


person Thiyagarajan vasu devan    schedule 07.12.2020    source источник


Ответы (2)


Начиная с примечания:

Не используйте $Input в качестве пользовательской переменной, поскольку это сохраненная автоматическая переменная.

Для чего вы пытаетесь:
вы перебираете массив и проверяете, является ли каждый элемент (с автоматическим преобразованием в строку) -like 1, которому предшествует любое количество символов и за ним следует любое количество символов, которое является либо истинным, либо ложным (а не общим количеством единиц в строке).

Вместо этого
вы можете использовать Select-String с ключом -AllMatches, который подсчитывает все совпадения:

[array]$inputs = 81,11,101,1811,1981
$count = 0
foreach($i in $inputs)
{       
Write-Host "Processing element $input"
$count += ($i | Select-String 1 -AllMatches).Matches.Count 
}
Write-Host "Number of 1's in the given array is $count"

На самом деле, благодаря функции PowerShell перечисления элементов, вам даже не нужно перебирать каждый элемент массива для этого, и просто упростите это до этого:

[array]$inputs = 81,11,101,1811,1981
$count = ($Inputs | Select-String 1 -AllMatches).Matches.Count
Write-Host "Number of 1's in the given array is $count"

Number of 1's in the given array is 10
person iRon    schedule 07.12.2020
comment
Пожалуйста, решите, полезен ли ответ, а затем... - person iRon; 07.12.2020
comment
Спасибо за решение и предложение. Это также работает. Я решил эту проблему с помощью приведенного ниже сценария. Это правильный подход, [string]$inputs = 89,89,99,909,9899,9989,9.09 $count = 0 foreach($i in $inputs.ToCharArray() ) { if($i -eq 9) {$count++} } Write-Host Количество девяток в данном массиве равно $count - person Thiyagarajan vasu devan; 08.12.2020

Я решил вышеуказанную проблему с помощью скрипта ниже,

[string]$inputs = 81,11,101,1811,1981
$count = 0
foreach($i in $inputs.ToCharArray())
{  
    if($i -eq "1")   
    {$count++}  
 
}
Write-Host "Number of 1's in the given array is $count"
person Thiyagarajan vasu devan    schedule 08.12.2020