2017-05-19 33 views
5

Często piszę listy rzeczy i wykonuję wyliczenia przeciwko nim, aby wykonać pewne get/set.Hashtable vs tablica obiektów niestandardowych dotyczących iteracji

Nienawidzę wymieniać hashtables, ponieważ ilekroć muszę to zrobić, muszę zgiąć swój umysł wstecz do pracy z obiektami hashtable.

$hashtablelistofitems = @{} 

$hashtablelistofitems.add("i'm a key", "i'm a value") 

foreach ($item in $hashtablelistofitems.keys) { 
    $item 
    $hashtablelistofitems.item($item) 
} 

Zamiast tego zwykle powracam do korzystania z jednowymiarowej tablicy niestandardowego obiektu o dwóch właściwościach nienaruszalności.

$array = @() 

$listofitems = "" | select key,value 

$listofitems.key = "i'm a key" 
$listofitems.value = "i'm a value" 

$array += $listofitems 

foreach ($item in $listofitems) { 
    $item.key 
    $item.value 
} 

Dlaczego powinienem używać tej metody za pomocą hashtable? Po prostu dlatego, że gwarantuje tylko jedną wartość na klucz?

Odpowiedz

5

Należy używać hashtable jeśli chcesz zapisać listę wartości klucza i nie stworzyć tablicy zawierający niestandardowy obiekt z dwóch właściwości (klucz/wartości) dla głównie z dwóch powodów:

  1. Mógłbyś chcesz przekazać swój hashtable do funkcji, która oczekuje hashtable.
  2. Hashtable to wbudowany typ PowerShell, o którym wiedzą użytkownicy. Twoje drugie podejście jest trudniejsze do odczytania/utrzymania dla innych użytkowników.

Uwaga: Można iteracyjne nad hashtable prawie tak samo jak swoim podejściu wywołując GetEnumerator() funkcję:

foreach ($item in $listofitems.GetEnumerator()) { 
    $item.key 
    $item.value 
} 

Również hashtable pochodzi z metod przydatnych że może chcesz użyć:

@{} | Get-Member | Where-Object MemberType -eq Method | Select Name 

wyjściowa:

Name    
----    
Add    
Clear    
Clone    
Contains   
ContainsKey  
ContainsValue  
CopyTo   
Equals   
GetEnumerator  
GetHashCode  
GetObjectData  
GetType   
OnDeserialization 
Remove   
ToString 
+0

Chcę poznać opinie innych osób. To są wszystkie dobre powody. – mbrownnyc

+0

Moja zredagowana odpowiedź może Cię uszczęśliwić ;-) –

+0

Ahh hah! To robi! nie może zaakceptować odpowiedzi przez kolejne 3 minuty. – mbrownnyc

2

To jest nawet w pobliżu tak użyteczne jako kompendium Marcina, ale jest na tyle użyteczny.

To artykuł MSDN o tym, jak konwertować tam iz powrotem między Hashtables i PSCustomObjects. The article