Bird
Raised Fist0
PowerShellscripting~10 mins

Hash tables (dictionaries) in PowerShell - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Hash tables (dictionaries)
Create empty hash table
↓
Add key-value pairs
↓
Access value by key
↓
Update or remove pairs
↓
Use hash table for fast lookup
↓
End
This flow shows how a hash table is created, filled with key-value pairs, accessed, updated, and used for quick data lookup.
Execution Sample
PowerShell
$hash = @{}
$hash['name'] = 'Alice'
$hash['age'] = 30
$name = $hash['name']
$hash['age'] = 31
$hash.Remove('name')
$hash
This code creates a hash table, adds keys 'name' and 'age', updates 'age', removes 'name', and then outputs the hash table.
Execution Table
StepActionHash Table StateOutput
1Create empty hash table{}
2Add key 'name' with value 'Alice'{'name': 'Alice'}
3Add key 'age' with value 30{'name': 'Alice', 'age': 30}
4Access value for key 'name'{'name': 'Alice', 'age': 30}Alice
5Update key 'age' to 31{'name': 'Alice', 'age': 31}
6Remove key 'name'{'age': 31}
7Output final hash table{'age': 31}@{age=31}
💡 All operations complete, final hash table contains only 'age' with value 31.
Variable Tracker
VariableStartAfter 1After 2After 3After 4After 5After 6Final
$hash{}{}{'name': 'Alice'}{'name': 'Alice', 'age': 30}{'name': 'Alice', 'age': 30}{'name': 'Alice', 'age': 31}{'age': 31}{'age': 31}
$nameundefinedundefinedundefinedAliceAliceAliceAliceAlice
Key Moments - 3 Insights
Why does accessing $hash['name'] after removal still show 'Alice' in the variable tracker?
Because $name was assigned the value 'Alice' before the key 'name' was removed from the hash table (see step 4 in execution_table). Removing the key later does not change the already stored variable.
What happens if you try to access a key that does not exist in the hash table?
PowerShell returns null or nothing for a missing key. This is not shown in the current table but is important to remember when accessing keys.
Why is the hash table output shown as '@{age=31}' instead of a JSON-like string?
PowerShell displays hash tables in its own format '@{key=value}'. This is normal and means the hash table contains the key 'age' with value 31.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the value of $hash after step 3?
A{'age': 31}
B{'name': 'Alice'}
C{'name': 'Alice', 'age': 30}
D{}
💡 Hint
Check the 'Hash Table State' column at step 3 in the execution_table.
At which step is the key 'name' removed from the hash table?
AStep 6
BStep 4
CStep 5
DStep 7
💡 Hint
Look for the 'Remove key' action in the execution_table.
If you tried to access $hash['name'] after step 6, what would happen?
AIt would return 'Alice'
BIt would return null or nothing
CIt would return 31
DIt would cause an error
💡 Hint
Consider what happens when a key is removed from a hash table (see key_moments).
Concept Snapshot
Hash tables store data as key-value pairs.
Create with @{} and add pairs like $hash['key'] = value.
Access values by keys: $hash['key'].
Update by assigning new value to existing key.
Remove keys with $hash.Remove('key').
Fast lookup by keys is the main benefit.
Full Transcript
This lesson shows how to use hash tables (dictionaries) in PowerShell. We start by creating an empty hash table with @{}. Then we add key-value pairs like 'name' and 'age'. We access values by their keys, update values, and remove keys. The execution table traces each step, showing how the hash table changes. Variables like $hash and $name are tracked to see their values over time. Key moments clarify common confusions, such as why a variable keeps a value even after the key is removed. The visual quiz tests understanding of the hash table state at different steps. Finally, the concept snapshot summarizes the main points for quick review.

Practice

(1/5)
1. What is the correct way to create an empty hash table in PowerShell?
easy
A. ()
B. []
C. @{}
D. {}

Solution

  1. Step 1: Understand hash table syntax in PowerShell

    PowerShell uses @{} to define hash tables, which store key-value pairs.
  2. Step 2: Identify the empty hash table syntax

    An empty hash table has no key-value pairs inside, so it is @{}.
  3. Final Answer:

    @{} -> Option C
  4. Quick Check:

    Empty hash table = @{ } [OK]
Hint: Use @{} to create hash tables in PowerShell [OK]
Common Mistakes:
  • Using {} which is a script block, not a hash table
  • Using [] which is an array, not a hash table
  • Using () which is for grouping or method calls
2. Which of the following is the correct syntax to add a key-value pair 'Name' = 'Alice' to an existing hash table $person?
easy
A. $person[Name] = 'Alice'
B. $person.Name = Alice
C. $person->Add('Name', 'Alice')
D. $person.Add('Name', 'Alice')

Solution

  1. Step 1: Recall how to add key-value pairs to hash tables

    PowerShell hash tables have an Add() method to add new keys and values.
  2. Step 2: Identify correct method call syntax

    The correct syntax is $person.Add('Name', 'Alice'). Note that the Add() method specifically adds new entries.
  3. Final Answer:

    $person.Add('Name', 'Alice') -> Option D
  4. Quick Check:

    Add key-value with Add() method [OK]
Hint: Use Add() method to add new keys to hash tables [OK]
Common Mistakes:
  • Using -> which is not PowerShell syntax
  • Using dot notation with unquoted value
  • Using unquoted key in square brackets
3. What will be the output of this PowerShell code?
$hash = @{ 'a' = 1; 'b' = 2 }
$hash['a'] = 3
$hash['c'] = 4
$hash['b']
medium
A. 2
B. 1
C. 3
D. 4

Solution

  1. Step 1: Understand the initial hash table and updates

    The hash table starts with keys 'a' = 1 and 'b' = 2. Then 'a' is updated to 3, and a new key 'c' = 4 is added.
  2. Step 2: Identify the value accessed

    The code outputs $hash['b'], which was never changed and remains 2.
  3. Final Answer:

    2 -> Option A
  4. Quick Check:

    Access unchanged key 'b' = 2 [OK]
Hint: Check which key is accessed after updates [OK]
Common Mistakes:
  • Confusing updated key 'a' with accessed key 'b'
  • Assuming last added key 'c' is accessed
  • Mixing values of different keys
4. Identify the error in this PowerShell code snippet:
$ht = @{ 'x' = 10 }
$ht.Add('x', 20)
medium
A. Runtime error: key 'x' already exists
B. Syntax error in hash table creation
C. No error, code runs fine
D. Add method does not exist for hash tables

Solution

  1. Step 1: Understand hash table initialization

    The hash table $ht is created with key 'x' = 10.
  2. Step 2: Analyze the Add() method call

    Calling $ht.Add('x', 20) tries to add a duplicate key 'x', which causes a runtime error.
  3. Final Answer:

    Runtime error: key 'x' already exists -> Option A
  4. Quick Check:

    Adding duplicate key causes runtime error [OK]
Hint: Add() fails if key already exists in hash table [OK]
Common Mistakes:
  • Assuming Add() updates existing keys
  • Thinking Add() method doesn't exist
  • Confusing syntax error with runtime error
5. You have a list of users and their ages:
$users = @('Alice', 'Bob', 'Charlie')
$ages = @(25, 30, 35)

Which PowerShell code correctly creates a hash table mapping each user to their age?
hard
A. $userAges = @{}; foreach ($user in $users) { $userAges.Add($user, $ages) }
B. $userAges = @{}; for ($i=0; $i -lt $users.Count; $i++) { $userAges[$users[$i]] = $ages[$i] }
C. $userAges = @{}; $users | ForEach-Object { $userAges.Add($_, $ages[$_]) }
D. $userAges = @{}; for ($i=0; $i -le $users.Count; $i++) { $userAges[$i] = $ages[$i] }

Solution

  1. Step 1: Understand the goal

    Create a hash table where each user name is a key and their corresponding age is the value.
  2. Step 2: Analyze each option

    $userAges = @{}; for ($i=0; $i -lt $users.Count; $i++) { $userAges[$users[$i]] = $ages[$i] } uses a for loop with index to assign each user key to the correct age value. $userAges = @{}; foreach ($user in $users) { $userAges.Add($user, $ages) } tries to add all ages at once, which is incorrect. $userAges = @{}; $users | ForEach-Object { $userAges.Add($_, $ages[$_]) } uses $_ as index but $_ is the user string, not an index. $userAges = @{}; for ($i=0; $i -le $users.Count; $i++) { $userAges[$i] = $ages[$i] } loops one too many times and uses numeric keys instead of user names.
  3. Final Answer:

    $userAges = @{}; for ($i=0; $i -lt $users.Count; $i++) { $userAges[$users[$i]] = $ages[$i] } -> Option B
  4. Quick Check:

    Use indexed loop to map keys to values [OK]
Hint: Use index loop to map two lists into hash table [OK]
Common Mistakes:
  • Using foreach without index to access parallel array
  • Using wrong loop bounds causing errors
  • Assigning numeric keys instead of user names
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard