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 Createstatic 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.
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:
I can create a tuple with more than eight elements by using the Restproperty. I do this by creating a nested tuple in the eighth element. When I reference the elements stored in the Restproperty, I do so with a double type of attribution: $T.Rest.Item1.Item3. My new tuple is stored within Item1 of the Restproperty. 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:
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