Summary: Learn how to use a Tuple in Windows PowerShell

Hey, Scripting Guy! I read your article from yesterday, so I know about Tuples. How do I actually use one?

—HD

Hello HD,

Microsoft Scripting Guy, Ed Wilson, is here. I just got back from working out with my trainer. I am not nearly as sore today, but then there is always tomorrow. Anyway, I decided to drink a protein shake and a glass of water now. I will have tea later with my mid-morning snack. I grabbed my Surface Pro 3, and I am quickly checking my email to scripter@microsoft.com.

Note  For a good introduction to Tuples, read What’s a Tuple, and Why Would I Want to Use It?

Creating Tuples

A two element Tuple is called a 2-tuple, or a pair. The way I create it is to use the Create static method from the System.Tuple .NET Framework class, and specify two elements. Here is an example of creating a pair:

$P = [System.Tuple]::Create("Flintstone","Rubble")

To access the two elements, I use parameter replacement and the Format (-f) operator. I specify each element (beginning at 0) with a pair of curly brackets. On the other side of the format operator, I specify the tuple element (item number).

Note  For parameter replacement and the Format operator, the elements are zero-based. Therefore, the first element is {0}. On the other hand, when tuples are referenced by item number, they are one-based. Therefore, the first tuple element is Item1

To use the tuple, I use parameter replacement and the Format operator. Here is an example:

"Fred's last name is {0} and Barney's last name is {1}" -f

  $p.Item1, $p.Item2

The image that follows illustrates creating a 2-tuple (pair) and accessing each of the elements.

Image of command output

If I want to create a 3-tuple (a triple), it works exactly the same way as creating a 2-tuple. All I need to do is to add an additional element. I access the third element in the same way as I access the other elements. Here is the code:

$P = [System.Tuple]::Create("Flintstone","Rubble","Dino")

"Fred's last name is {0} and Barney's last name is {1}

Fred's dog is really a dinosaur named {2}" -f

  $p.Item1, $p.Item2, $p.Item3

Here is an example of running the script, and the output produced by the script:

Image of command output

I can create a tuple with more than eight elements by using the Rest property. I do this by creating a nested tuple in the eighth element. When I reference the elements stored in the Rest property, I do so with a double type of attribution: $T.Rest.Item1.Item3. My new tuple is stored within Item1 of the Rest property. Here is an example of how to do this:

$T = [System.Tuple]::Create("Betelgeuse","RW Cephei","KW Sagitarii","KY Cygni","V354 Cephei",

        "WOH G64","Mu Cephei",[System.Tuple]::Create("V838 Monocerotis","VV Cephei A",

        "VY Canis Majoris"))

"The smallest of the top ten stars is {0}.

The largest of the top ten stars is {1}" -f $T.Item1, $T.Rest.item1.Item3

The script and output from the script are shown here:

Image of command output

HD, that is all there is to using tuples with Windows PowerShell. Join me tomorrow when I will have a guest blogger, Windows PowerShell MVP, Joel Bennett, talk about tuples and their differences from other data structures.

I invite you to follow me on Twitter and Facebook. If you have any questions, send email to me at scripter@microsoft.com, or post your questions on the Official Scripting Guys Forum. See you tomorrow. Until then, peace.

Ed Wilson, Microsoft Scripting Guy