There is a Difference: Arrays Versus Hash Tables - tommymaynard.com (2024)

After reading a short post on the PowerShell subreddit recently, I was compelled to write a quick post here about arrays and hash tables. The concepts are similar, but the two are different, meaning that — interruption! There have now been two posts where the OP didn’t know one versus the other. It is basic stuff, sure, but it is important stuff.

Anyway, talking about one when you mean the other isn’t going to be okay any longer — it really never was. While someone mentioned the incorrect usage in the thread, writing, for me, still felt necessary and potentially beneficial.

Instead of writing my own definitions, let’s use Microsoft’s. We’ll begin with an array: “Data structures designed to store collections of items.“ If you think of a variable, back when you learned about those the first time, you probably learn how to store a single value in your variable. Okay good. This time we’re going to store multiple values in a single variable. That is what this data structure provides.

We are beginning with a simple variable that contains a simple, single value. Not much to it.

[PS7.2.0][C:\] $SingleValue = 'One thing'[PS7.2.0][C:\] $SingleValueOne thing[PS7.2.0][C:\] $SingleValue.GetType()IsPublic IsSerial Name BaseType-------- -------- ---- --------True True String System.Object

Now, let’s work with arrays. We’re still going to use a single variable, we’re just going to load it up with a different data structure that’s going to let us store multiple values in it. We actually don’t have to do much to make this happen, so here we go.

In this example, we’re creating a variable named $Array01. We’re storing the numeric values of 1, 2, and 3 inside the variable as an array.

[PS7.2.0][C:\] $Array01 = 1,2,3[PS7.2.0][C:\] $Array01123[PS7.2.0][C:\] $Array01.GetType()IsPublic IsSerial Name BaseType-------- -------- ---- --------True True Object[] System.Array

Well, that was easy. This next example is the same as above, however, it includes @() around our numeric values. This operator — the array sub-expression operator — takes whatever is inside it and makes it into an array.

[PS7.2.0][C:\] $Array02 = @(4,5,6)[PS7.2.0][C:\] $Array02456[PS7.2.0][C:\] $Array02.GetType()IsPublic IsSerial Name BaseType-------- -------- ---- --------True True Object[] System.Array

The array sub-expression operator will even make an array of nothing.

[PS7.2.0][C:\] $Array03 = @()[PS7.2.0][C:\] $Array03[PS7.2.0][C:\] $Array03.GetType()IsPublic IsSerial Name BaseType-------- -------- ---- --------True True Object[] System.Array

Here is one you probably do not see often. The comma in front of the 7 will indicate to PowerShell to create an array that contains a single value, which we will prove when we start returning the count of our various arrays.

[PS7.2.0][C:\] $Array04 = ,7[PS7.2.0][C:\] $Array047[PS7.2.0][C:\] $Array04.GetType()IsPublic IsSerial Name BaseType-------- -------- ---- --------True True Object[] System.Array[PS7.2.0][C:\] $Array04.Count1[PS7.2.0][C:\] $Array03.Count0[PS7.2.0][C:\] $Array02.Count3[PS7.2.0][C:\] $Array01.Count3

Do you get it? It is a data structure designed to accommodate multiple values. You did not see it here yet, but arrays can hold strings (words or sentences), just as easily as numbers. You can even mix them in the same array and store them in a single variable.

This array, stored in the $Array05 variable contains five different colors.

[PS7.2.0][C:\] $Array05 = 'black','red','green','blue','brown'[PS7.2.0][C:\] $Array05blackredgreenbluebrown

Each item in an array can be referenced by an index — a number that represents its location. It is a positional place in line. The first element, or item in the array — black in our case — is in index zero. This is because arrays are always zero-based. This means red would be in index 1, green in index 2, blue in 3, and brown in 4. Zero through four is five, as in five total elements, or values, in our array. Let’s verify.

[PS7.2.0][C:\] $Array05[0]black[PS7.2.0][C:\] $Array05[1]red[PS7.2.0][C:\] $Array05[2]green[PS7.2.0][C:\] $Array05[3]blue[PS7.2.0][C:\] $Array05[4]brown[PS7.2.0][C:\]

Let’s try some other things! While not often used in my day-to-day, we can perform arithmetic on the indexes. We can even use the range operator (..) and go forward and backward through our elements. What else… Oh, let’s try some negative indexes numbers, too. Those work in reverse from the end of the array to the beginning.

[PS7.2.0][C:\] $Array05[3-3]black[PS7.2.0][C:\] $Array05[2+1]blue[PS7.2.0][C:\] $Array05[0..4]blackredgreenbluebrown[PS7.2.0][C:\] $Array05[4..0]brownbluegreenredblack[PS7.2.0][C:\] $Array05[-1]brown[PS7.2.0][C:\] $Array05[-2]blue[PS7.2.0][C:\] $Array05[-3]green[PS7.2.0][C:\] $Array05[-4]red[PS7.2.0][C:\] $Array05[-5]black

Hash tables have a good number of similarities to arrays, and perhaps that is the reason why there is some confusion. Microsoft even uses the word array to describe them:“A hash table, also known as a dictionary or associative array, is a compact data structure that stores one or more key/value pairs.” I don’t use the words associative array often enough, but I should; I like it.

To the person on Reddit that called hash tables, hashmaps, and just maps: No. I believe that term is a carryover from maybe Java. In my experience, I have not heard it in the PowerShell community.

Anyway, arrays and associative arrays are both data structures. They can both hold multiple values, and they can both be stored in a single variable. The difference is keys and values. Arrays hold single items in each index, while a hash table holds a key-value pair in each.

Before we fill this up, let’s create an empty hash table. Notice the difference between this and the array. If it is used for an array, the operator will always be an instant giveaway: @() is for arrays, and @{} is for hash tables. Notice my liberal use of the GetType() method in this post; it’ll help you make object determinations, so you can always know which you’re working with, without having to view, or see, the data stored in the data structure.

[PS7.2.0][C:\] $Hash01 = @{}[PS7.2.0][C:\] $Hash01[PS7.2.0][C:\] $Hash01.Count0[PS7.2.0][C:\] $Hash01.GetType()IsPublic IsSerial Name BaseType-------- -------- ---- --------True True Hashtable System.Object

Now, let’s populate a hash table… in VS Code. Somethings I would just rather not demonstrate in the console.

$Hash02 = @{ Dad = 'David' Mom = 'Betty' Daughter = 'Janice' Son = 'Bryan'}$Hash02Name Value---- -----Son BryanDad DavidMom BettyDaughter Janice

This also could have been written in a couple of other ways.

$Hash02 = @{ Dad = 'David'; Mom = 'Betty'; Daughter = 'Janice'; Son = 'Bryan'}$Hash02 = @{ Dad = 'David' Mom = 'Betty' Daughter = 'Janice' Son = 'Bryan'}

While hash tables have indexes, they’re non-numeric. Actually, I am not even sure I like the term index when working with hash tables. I suggest we call it what they are: keys. Maybe you noticed, but the order in which we created our hash table was not the order in which it was returned. A numeric value here would not help us anyway. Instead, we’re going to use the keys as our indexes to return our values.

$Hash02['Dad']David$Hash02['Daughter']Janice

There is a good possibility that you are probably going to want to loop through and display all the values in your hash table. It’s a little out of place, but we’ll do that with one of our arrays here, too. Using the GetEnumerator() method allows us to get to the key and value, values out of our hash table. In this first, hash table example we are using the key and associated value in a string. This requires the use of the subexpression operator ($()), so that we can display our values within the string.

foreach ($Person in $Hash02.GetEnumerator()) { "The $($Person.Key) is $($Person.Value)."}The Son is BryanThe Dad is DavidThe Mom is BettyThe Daughter is Janice

We are using the subexpression operator in the string created by looping over our array, too.

$Array05 = 'black','red','green','blue','brown'foreach ($Color in $Array05) {"Is your favorite color $($Color)?"}Is your favorite color black?Is your favorite color red?Is your favorite color green?Is your favorite color blue?Is your favorite color brown?

This has been a lengthy post — who knew this would happen!? There is one last thing I want to mention, and that is about creating an ordered hash table, or dictionary. We tend to use the dictionary term when we order a hash table.

$Hash03 = [ordered]@{ Monday = 'Chipotle' Tuesday = 'Pizza' Wednesday = 'Mahi Mahi' Thursday = 'Ravioli' Friday = 'Orange Chicken'}$Hash03Name Value---- -----Monday ChipotleTuesday PizzaWednesday Mahi MahiThursday RavioliFriday Orange Chicken

Because this is ordered, we can use numeric indexes again. Keep in mind, however, that doing this is only going to return the values and not the keys, as well. It may even momentarily confuse you into thinking this is an array, not a hash table, or an associative array. Maybe stick to using a foreach at this point. Do not forget the GetType() method to ensure you know your data structures.

$Hash03[0..4]Chipotle PizzaMahi Mahi Ravioli Orange Chicken$Hash03.GetType()IsPublic IsSerial Name BaseType-------- -------- ---- -------- True True OrderedDictionary System.Object

Okay, I am stopping here. There’s plenty to know about these two data structures, and at this point, it is more than I’m willing to share. Even so, this should provide a decent breakdown to go along with the Microsoft documentation and other information that’s available to consume on this topic. Know what you are talking about.

There is a Difference: Arrays Versus Hash Tables - tommymaynard.com (2024)
Top Articles
Your House Is Not an Asset; It’s an Expense (Content for Financial Advisors)
Statement of investment policy principles (SIPP) and investment risk - pensionsauthority
Katie Pavlich Bikini Photos
Gamevault Agent
Hocus Pocus Showtimes Near Harkins Theatres Yuma Palms 14
Free Atm For Emerald Card Near Me
Craigslist Mexico Cancun
Hendersonville (Tennessee) – Travel guide at Wikivoyage
Doby's Funeral Home Obituaries
Vardis Olive Garden (Georgioupolis, Kreta) ✈️ inkl. Flug buchen
Select Truck Greensboro
Things To Do In Atlanta Tomorrow Night
Non Sequitur
How To Cut Eelgrass Grounded
Pac Man Deviantart
Alexander Funeral Home Gallatin Obituaries
Craigslist In Flagstaff
Shasta County Most Wanted 2022
Energy Healing Conference Utah
Testberichte zu E-Bikes & Fahrrädern von PROPHETE.
Aaa Saugus Ma Appointment
Geometry Review Quiz 5 Answer Key
Walgreens Alma School And Dynamite
Bible Gateway passage: Revelation 3 - New Living Translation
Yisd Home Access Center
Home
Shadbase Get Out Of Jail
Gina Wilson Angle Addition Postulate
Celina Powell Lil Meech Video: A Controversial Encounter Shakes Social Media - Video Reddit Trend
Walmart Pharmacy Near Me Open
A Christmas Horse - Alison Senxation
Ou Football Brainiacs
Access a Shared Resource | Computing for Arts + Sciences
Pixel Combat Unblocked
Cvs Sport Physicals
Mercedes W204 Belt Diagram
Rogold Extension
'Conan Exiles' 3.0 Guide: How To Unlock Spells And Sorcery
Teenbeautyfitness
Weekly Math Review Q4 3
Facebook Marketplace Marrero La
Nobodyhome.tv Reddit
Topos De Bolos Engraçados
Gregory (Five Nights at Freddy's)
Grand Valley State University Library Hours
Holzer Athena Portal
Hampton In And Suites Near Me
Stoughton Commuter Rail Schedule
Bedbathandbeyond Flemington Nj
Free Carnival-themed Google Slides & PowerPoint templates
Otter Bustr
Selly Medaline
Latest Posts
Article information

Author: Kerri Lueilwitz

Last Updated:

Views: 6212

Rating: 4.7 / 5 (47 voted)

Reviews: 86% of readers found this page helpful

Author information

Name: Kerri Lueilwitz

Birthday: 1992-10-31

Address: Suite 878 3699 Chantelle Roads, Colebury, NC 68599

Phone: +6111989609516

Job: Chief Farming Manager

Hobby: Mycology, Stone skipping, Dowsing, Whittling, Taxidermy, Sand art, Roller skating

Introduction: My name is Kerri Lueilwitz, I am a courageous, gentle, quaint, thankful, outstanding, brave, vast person who loves writing and wants to share my knowledge and understanding with you.