Bagikan melalui


10. Hashtables

Catatan editorial

Penting

Windows PowerShell Language Specification 3.0 diterbitkan pada Desember 2012 dan didasarkan pada Windows PowerShell 3.0. Spesifikasi ini tidak mencerminkan status PowerShell saat ini. Tidak ada rencana untuk memperbarui dokumentasi ini untuk mencerminkan status saat ini. Dokumentasi ini disajikan di sini untuk referensi historis.

Dokumen spesifikasi tersedia sebagai dokumen Microsoft Word dari Pusat Unduhan Microsoft di: https://www.microsoft.com/download/details.aspx?id=36389 Dokumen Word telah dikonversi untuk presentasi di sini di Microsoft Learn. Selama konversi, beberapa perubahan editorial telah dilakukan untuk mengakomodasi pemformatan untuk platform Dokumen. Beberapa kesalahan ketik dan kesalahan kecil telah dikoreksi.

Sintaksis:

Tips

Notasi ~opt~ dalam definisi sintaks menunjukkan bahwa entitas leksikal bersifat opsional dalam sintaks.

hash-literal-expression:
    @{ new-lines~opt~ hash-literal-body~opt~ new-lines~opt~ }

hash-literal-body:
    hash-entry
    hash-literal-body statement-terminators hash-entry

hash-entry:
    key-expression = new-lines~opt~ statement

key-expression:
    simple-name
    unary-expression

statement-terminator:
    ;
    new-line-character

10.1 Pengantar

Jenis Hashtable mewakili kumpulan pasangan kunci/nilai objek yang mendukung pengambilan nilai yang efisien saat diindeks oleh kunci. Setiap pasangan kunci/nilai adalah elemen , yang disimpan dalam beberapa jenis objek yang ditentukan implementasi.

Kunci elemen tidak boleh berupa nilai null. Tidak ada batasan pada jenis kunci atau nilai. Kunci duplikat tidak didukung.

Mengingat objek pasangan kunci/nilai, kunci dan nilai terkait dapat diperoleh dengan menggunakan properti instans Kunci dan Nilai.

Diberikan satu atau beberapa kunci, nilai yang sesuai dapat diakses melalui operator subskrip Hashtable [] (§7.1.4.3).

Semua Hashtable memiliki jenis Hashtable (§4.3.3).

Urutan kunci dalam koleksi yang dikembalikan oleh Kunci tidak ditentukan; namun, urutannya sama dengan nilai terkait dalam koleksi yang dikembalikan oleh Nilai.

Berikut adalah beberapa contoh yang melibatkan Hashtable:

$h1 = @{ FirstName = "James"; LastName = "Anderson"; IDNum = 123 }
$h1.FirstName # designates the key FirstName
$h1["LastName"] # designates the associated value for key LastName
$h1.Keys # gets the collection of keys

elemen disimpan dalam objek tipeDictionaryEntry , dan koleksi yang dikembalikan oleh kunci dan nilai memiliki tipe ICollection.

10.2 Pembuatan hashtable

Hashtable dibuat melalui literal hash (§7.1.9) atau cmdlet New-Object. Ini dapat dibuat dengan nol atau lebih elemen. Properti Count mengembalikan jumlah elemen saat ini.

10.3 Menambahkan dan menghapus elemen Hashtable

Elemen dapat ditambahkan ke Hashtable dengan menetapkan (§7.11.1) nilai ke nama kunci yang tidak ada atau ke subskrip (§7.1.4.3) yang menggunakan nama kunci yang tidak ada. Penghapusan elemen memerlukan penggunaan metode Hapus. Misalnya

$h1 = @{ FirstName = "James"; LastName = "Anderson"; IDNum = 123 }
$h1.Dept = "Finance" # adds element Finance
$h1["Salaried"] = $false # adds element Salaried
$h1.Remove("Salaried") # removes element Salaried

10.4 Penggabungan Hashtable

Hashtable dapat digabungkan melalui operator + dan +=, yang keduanya menghasilkan pembuatan Hashtablebaru. Hashtable yang ada tidak berubah. Lihat §7.7.4 untuk informasi selengkapnya.

10.5 Tabel Hash sebagai tipe referensi

Karena Hashtable adalah jenis referensi, penugasan Hashtable melibatkan salinan dangkal; artinya, variabel yang ditetapkan untuk mengacu pada Hashtableyang sama; tidak ada salinan Hashtable yang dibuat. Misalnya

$h1 = @{ FirstName = "James"; LastName = "Anderson"; IDNum = 123 }
$h2 = $h1
$h1.FirstName = "John" # change key's value in $h1
$h2.FirstName # change is reflected in $h2

10.6 Menghitung melalui Hashtable

Untuk memproses setiap pasangan dalam , gunakan properti Kunci untuk mengambil daftar kunci sebagai array, lalu menghitung elemen array tersebut yang mendapatkan nilai terkait melalui properti Nilai atau subskrip, sebagai berikut

$h1 = @{ FirstName = "James"; LastName = "Anderson"; IDNum = 123}
foreach ($e in $h1.Keys) {
   "Key is " + $e + ", Value is " + $h1[$e]
}