2016-02-29 4 views
1

Здесь я просто хочу, чтобы получить предложение от экспертов на этом форуме:Любой лучший способ сохранить два VALES против одного Id/Index

В Poweshell, у меня есть требование, где я хочу, чтобы хранить два различных значения от одного индекса , Потому что позже я хочу, чтобы получить доступ к этим два значения против уникального индекса Somthing как и в Powershell:

at index 0 = [value1,valu2] 
at index 1 = [value3,valu4] 
at index 2 = [value5,valu6] 

и так далее ...

Каков наилучший подход, доступный, чтобы сделать это в PowerShell?

+1

Использование массива , или хеш-таблицу, или пользовательский объект. – Cobster

+0

Есть ли какой-либо массив, который может хранить два значения по одному индексу? Есть ли какой-нибудь пример – SPBeginer

+1

Массив массивов или массив хэш-таблиц и т. Д. – Cobster

ответ

1

Массив индексируется по номеру. Значение может быть любым объектом (включая другой массив).

$a = @(
    @('val1', 'val2') , 
    @(1234, 5678) , 
    @(321, 'val6') 
) 

$a[0][0] # 'val1' 
$a[0][1] # 'val2' 
$a[2][0] # 321 

Чтобы использовать .Add() и .Remove() методы, рассмотрит [hashtable] (это один имеют массивы значений):

$a = @{ 
    0 = @('val1', 'val2') 
    1 = @(1234, 5678) 
    2 = @(321, 'val6') 
} 

$a.Add(3, @('valX','valY')) 

$a[0][0] # 'val1' 
$a[0][1] # 'val2' 
$a[2][0] # 321 

Значение может сам быть Hashtables, а также, если вы хотите использовать методы на они тоже.

+0

Вместо массива существует ли какая-либо другая коллекция avaiable, где я могу использовать встроенные методы добавления/удаления, как мы используем в Arraylist? – SPBeginer

+0

@SPBeginer см. Редактировать – briantist

+0

Спасибо @PetSerAl :) – briantist

1

Для полноты вы также можете использовать пользовательские объекты PowerShell. Я использую тот же набор данных, что и бриантист.

$a = @(
    [pscustomobject]@{Index1 = 'val1';Index2 = 'val2'}, 
    [pscustomobject]@{Index1 = '1234';Index2 = '5678'}, 
    [pscustomobject]@{Index1 = '321';Index2 = 'val6'} 
) 

$a[2].Index1 
321 

Это требует 3,0, но вы можете изменить это легко 2.0

Если у вас уже есть коллекция массивов, то вы можете просто использовать ту же логику в цикле

$a = @(
    @('val1', 'val2') , 
    @(1234, 5678) , 
    @(321, 'val6') 
) | ForEach-Object{ 
    [pscustomobject]@{Index1 = $_[0];Index2 = $_[1]} 
} 
Смежные вопросы