2016-03-31 2 views
0

У меня есть массив как это:Число вхождения данных в массиве

OptiPlex 790 
Precision WorkStation T7500 
Precision WorkStation T7400 
Precision T1500 
Precision WorkStation T3500 
CELSIUS R650 
VMware Virtual Platform 
Precision T1500 
OptiPlex GX620

Я хочу, чтобы получить количество массива и добавлю, что в новом массиве.

Element:Count 
OptiPlex 790 1 
Precision WorkStation T7500 1 
Precision WorkStation T7500 1

Я хочу сохранить это значение в новом массиве. Поэтому я буду использовать его позже/где-то еще.

$array = @() 
for ($i=1; $i -le $rowMax-1; $i++) { 
    $Model = $sheet.Cells.Item($rowModel+$i, $colModel).text 
    Write-Host ("I am reading data on row: " + $i) 
    $array += $Model 
} 

$array | Group 

В настоящий момент над сценарием работает нормально, но я не знаю, как добавить эти данные в новый массив.

ответ

1

Я бы построить хэш-таблицу, а не массив:

$Models = @(
    'OptiPlex 790' 
    'Precision WorkStation T7500' 
    'Precision WorkStation T7400' 
    'Precision T1500' 
    'Precision WorkStation T3500' 
    'CELSIUS R650' 
    'VMware Virtual Platform' 
    'Precision T1500' 
    'OptiPlex GX620' 
) 

# Create a hashtable 
$ModelCount = @{} 

# Iterate over each entry in the array, increment value count in hashtable 
$Models |ForEach-Object { $ModelCount[$_]++ } 

Теперь ваш хеш-стол подсчитывает всю необходимую вам информацию:

PS C:\> $ModelCount 

Name       Value 
----       ----- 
OptiPlex 790     1 
VMware Virtual Platform  1 
Precision WorkStation T7500 1 
Precision T1500    2 
CELSIUS R650     1 
Precision WorkStation T7400 1 
OptiPlex GX620     1 
Precision WorkStation T3500 1 

И вы можете легко добавлять новые значения:

# Let's say you found another 3 OptiPlex GX620 somewhere: 
$ModelCount['OptiPlex GX620'] += 3 

и записей:

$ModelCount['New Model']++ 

И вы все еще можете перемещаться по нему:

PS C:\> $ModelCount.Keys |Sort-Object |ForEach-Object { 
>>>  Write-Host "We have $($ModelCount[$_]) of $_ in stock" 
>>> } 
We have 1 of CELSIUS R650 in stock 
We have 1 of OptiPlex 790 in stock 
We have 4 of OptiPlex GX620 in stock 
We have 2 of Precision T1500 in stock 
We have 1 of Precision WorkStation T3500 in stock 
We have 1 of Precision WorkStation T7400 in stock 
We have 1 of Precision WorkStation T7500 in stock 
We have 1 of VMware Virtual Platform in stock 
+0

Спасибо за ваш ответ. Я проверю и дам вам знать. – Ironic

+0

Один вопрос. Я могу увидеть $ ($ ModelCount [$ _]) это имя возвращенной модели и $ _ return count. Могу ли я присвоить это значение переменной. например, $ count = $ _ и $ name = $ ($ ModelCount [$ _]) Просьба сообщить. – Ironic

+0

Конечно, вы можете :) –

2

Существует Group-Object Командлет, который вы можете использовать для этого:

$array | group | select Name, Count 

Выход:

Name      Count 
----      ----- 
OptiPlex 790     1 
Precision WorkStation T7500  1 
Precision WorkStation T7400  1 
Precision T1500     2 
Precision WorkStation T3500  1 
CELSIUS R650     1 
VMware Virtual Platform   1 
+0

hoThanks для вашего ответа. Я попробую и дам вам знать. проголосовали. Как я могу добавить эти данные в массив? Любой совет. – Ironic

+1

$ result = $ array | группа | выберите Name, Count – Martin

+0

@Martin Спасибо за ваш комментарий. $ arr = $ array | Группа | Select Count не возвращает никакого значения. Но если я использую $ arr = $ array | Группа | Выберите «Имя», «Счет», тогда он работает нормально. Есть какие-либо комментарии по этому поводу? – Ironic

Смежные вопросы