2017-05-19 72 views
5

Sıklıkla bazı şeylerin listesini yazıp bazı alıcı/performansları gerçekleştirmek için bunlara karşı numaralandırma yapıyorum.Yineleme ile ilgili özel nesneler dizisi ile karşılaştırılabilir duruma getirme

Hasar sayımı yapmaktan nefret ediyorum, çünkü ne zaman yapmam gerekiyorsa, fikrimi hashtable nesnelerle çalışmak üzere geriye doğru bükmem gerekiyor.

$hashtablelistofitems = @{} 

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

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

Bunun yerine, genellikle iki noteproperties ile özel bir objenin tek boyutlu dizi kullanılarak geri döner.

Bu yöntemde üzerinde
$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 
} 
Neden kullanarak gereken

bir hashtable ? Sadece anahtar başına sadece tek bir değeri garanti ettiği için mi?

bir anahtar değeri listesini depolamak ve ağırlıklı olarak iki nedenden dolayı iki mülk (anahtar/değer) ile özel bir nesneyi içeren bir dizi oluşturmaz isterseniz bir hashtable kullanmalıdır

cevap

5

:

  1. Olabilir hashtable'ınızı bir hashtable olmasını bekleyen bir işleve aktarmak.
  2. Hashtable, kullanıcıların bildiği dahili PowerShell türüdür. İkinci yaklaşımınız diğer kullanıcıları okumak/sürdürmek daha zordur.

Not: Sen GetEnumerator() fonksiyonunu çağırarak yaklaşım olarak bir hashtable hemen hemen aynı yolu adımlayabilirsiniz: Ayrıca

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

, hashtable'a kullanışlı yöntemlerle gelir sen Kullanmak isteyebilir:

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

Çıktı:

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

Başkalarının girişlerini duymakla ilgileniyorum. Bunların hepsi iyi sebepler. – mbrownnyc

+0

Düzenlediğim yanıt sizi mutlu edebilir ;-) –

+0

Ahh hah! Yapıyor! cevabı 3 dakika daha kabul edemez. – mbrownnyc

2

Bu hiçbir yerde yakın Martin'in özet olarak yararlıdır, ama yeterince kullanışlı.

Bu Hashtables ve PSCustomObjects arasında ileri ve geri dönüştürme hakkında bir MSDN makalesi. The article