Why did I introduce Tuple?
While working, I have encountered many cases where the method we want to return a value, when arising or want to return more values, I have to create an object containing many of those values. return that object (ie I will have to change the type of data returned) and those cases only use that object once, such as maintaining a sourcecode of others and are afraid of changing it, use Tuple.
What is tuple?
Tuple introduced from .NET Framwork 4.0, is a structured data type that helps store complex data temporarily without having to create a new object class.
Each Tuple has predefined items1, item2, … There are a maximum of 8 items defined.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <span class="token keyword">public</span> class Tuple <span class="token operator"><</span> T1 <span class="token operator">></span> <span class="token keyword">public</span> class Tuple <span class="token operator"><</span> T1 <span class="token punctuation">,</span> T2 <span class="token operator">></span> <span class="token keyword">public</span> class Tuple <span class="token operator"><</span> T1 <span class="token punctuation">,</span> T2 <span class="token punctuation">,</span> T3 <span class="token operator">></span> <span class="token keyword">public</span> class Tuple <span class="token operator"><</span> T1 <span class="token punctuation">,</span> T2 <span class="token punctuation">,</span> T3 <span class="token punctuation">,</span> T4 <span class="token operator">></span> <span class="token keyword">public</span> class Tuple <span class="token operator"><</span> T1 <span class="token punctuation">,</span> T2 <span class="token punctuation">,</span> T3 <span class="token punctuation">,</span> T4 <span class="token punctuation">,</span> T5 <span class="token operator">></span> <span class="token keyword">public</span> class Tuple <span class="token operator"><</span> T1 <span class="token punctuation">,</span> T2 <span class="token punctuation">,</span> T3 <span class="token punctuation">,</span> T4 <span class="token punctuation">,</span> T5 <span class="token punctuation">,</span> T6 <span class="token operator">></span> <span class="token keyword">public</span> class Tuple <span class="token operator"><</span> T1 <span class="token punctuation">,</span> T2 <span class="token punctuation">,</span> T3 <span class="token punctuation">,</span> T4 <span class="token punctuation">,</span> T5 <span class="token punctuation">,</span> T6 <span class="token punctuation">,</span> T7 <span class="token operator">></span> <span class="token keyword">public</span> class Tuple <span class="token operator"><</span> T1 <span class="token punctuation">,</span> T2 <span class="token punctuation">,</span> T3 <span class="token punctuation">,</span> T4 <span class="token punctuation">,</span> T5 <span class="token punctuation">,</span> T6 <span class="token punctuation">,</span> T7 <span class="token punctuation">,</span> TRest <span class="token operator">></span> |
Each Tuple <> class has already been defined Property named Item1, Item2, Item3, … corresponding to the data types T1, T2, T3, … are transferred. The following image is an example:
Above kiows Tuple <T1, T2, T3, T4, T5, T6, T7, T8, TRest> when we transfer the data type, the map will correspond to the properties Item1, Item2, Item3, Item4, Item5 …
How to use Tuple?
Initializing a Tuple object has two ways:
- Create via the Create method in the Tuple class:
1 2 | var MyTuple <span class="token operator">=</span> Tuple <span class="token punctuation">.</span> <span class="token keyword">Create</span> <span class="token operator"><</span> <span class="token keyword">int</span> <span class="token punctuation">,</span> string <span class="token operator">></span> <span class="token punctuation">(</span> <span class="token number">1992</span> <span class="token punctuation">,</span> <span class="token string">"KhoaPC"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
- Create via Constructor constructor:
1 2 | var MyTuple2 <span class="token operator">=</span> new Tuple <span class="token operator"><</span> <span class="token keyword">int</span> <span class="token punctuation">,</span> string <span class="token operator">></span> <span class="token punctuation">(</span> <span class="token number">1992</span> <span class="token punctuation">,</span> <span class="token string">"KhoaPC"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Get the value from Tuple
1 2 | Console <span class="token punctuation">.</span> WriteLine <span class="token punctuation">(</span> <span class="token string">" Your birth year: {0}, Name: {1}"</span> <span class="token punctuation">,</span> MyTuple <span class="token punctuation">.</span> Item1 <span class="token punctuation">,</span> MyTuple <span class="token punctuation">.</span> Item2 <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
Tuple cage
If you want to include more than eight elements in a tuple, you can do that by nesting another tuple object as the eighth element. The last nested data set can be accessed using the Rest property. To get values from that nested tuple, use the Rest.Item1.Item <elelementNumber> command
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <span class="token comment">//Tạo Tuple numbers với một tuple lồng ở phần tử thứ 8</span> var numbers <span class="token operator">=</span> Tuple <span class="token punctuation">.</span> <span class="token keyword">Create</span> <span class="token punctuation">(</span> <span class="token number">1</span> <span class="token punctuation">,</span> <span class="token number">2</span> <span class="token punctuation">,</span> <span class="token number">3</span> <span class="token punctuation">,</span> <span class="token number">4</span> <span class="token punctuation">,</span> <span class="token number">5</span> <span class="token punctuation">,</span> <span class="token number">6</span> <span class="token punctuation">,</span> <span class="token number">7</span> <span class="token punctuation">,</span> Tuple <span class="token punctuation">.</span> <span class="token keyword">Create</span> <span class="token punctuation">(</span> <span class="token number">8</span> <span class="token punctuation">,</span> <span class="token number">9</span> <span class="token punctuation">,</span> <span class="token number">10</span> <span class="token punctuation">,</span> <span class="token number">11</span> <span class="token punctuation">,</span> <span class="token number">12</span> <span class="token punctuation">,</span> <span class="token number">13</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// return 1</span> numbers <span class="token punctuation">.</span> Item1 <span class="token punctuation">;</span> <span class="token comment">// return 7</span> numbers <span class="token punctuation">.</span> Item7 <span class="token punctuation">;</span> <span class="token comment">//return (8, 9, 10, 11, 12, 13)</span> numbers <span class="token punctuation">.</span> Rest <span class="token punctuation">.</span> Item1 <span class="token punctuation">;</span> <span class="token comment">//return 8</span> numbers <span class="token punctuation">.</span> Rest <span class="token punctuation">.</span> Item1 <span class="token punctuation">.</span> Item1 <span class="token punctuation">;</span> <span class="token comment">//return 9</span> numbers <span class="token punctuation">.</span> Rest <span class="token punctuation">.</span> Item1 <span class="token punctuation">.</span> Item2 <span class="token punctuation">;</span> |
You can place nested tuple objects anywhere in the string. However, nesting data sets should be placed at the end of the string to be accessible using the Rest attribute.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <span class="token comment">//Tạo Tuple numbers với một tuple lồng ở phần tử thứ 3</span> var numbers <span class="token operator">=</span> Tuple <span class="token punctuation">.</span> <span class="token keyword">Create</span> <span class="token punctuation">(</span> <span class="token number">1</span> <span class="token punctuation">,</span> <span class="token number">2</span> <span class="token punctuation">,</span> Tuple <span class="token punctuation">.</span> <span class="token keyword">Create</span> <span class="token punctuation">(</span> <span class="token number">3</span> <span class="token punctuation">,</span> <span class="token number">4</span> <span class="token punctuation">,</span> <span class="token number">5</span> <span class="token punctuation">,</span> <span class="token number">6</span> <span class="token punctuation">,</span> <span class="token number">7</span> <span class="token punctuation">,</span> <span class="token number">8</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token number">9</span> <span class="token punctuation">,</span> <span class="token number">10</span> <span class="token punctuation">,</span> <span class="token number">11</span> <span class="token punctuation">,</span> <span class="token number">12</span> <span class="token punctuation">,</span> <span class="token number">13</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// returns 1</span> numbers <span class="token punctuation">.</span> Item1 <span class="token punctuation">;</span> <span class="token comment">// return 2</span> numbers <span class="token punctuation">.</span> Item2 <span class="token punctuation">;</span> <span class="token comment">// return (3, 4, 5, 6, 7, 8)</span> numbers <span class="token punctuation">.</span> Item3 <span class="token punctuation">;</span> <span class="token comment">// return 3</span> numbers <span class="token punctuation">.</span> Item3 <span class="token punctuation">.</span> Item1 <span class="token punctuation">;</span> <span class="token comment">// return 9</span> numbers <span class="token punctuation">.</span> Item4 <span class="token punctuation">;</span> <span class="token comment">//return 13</span> numbers <span class="token punctuation">.</span> Rest <span class="token punctuation">.</span> Item1 <span class="token punctuation">;</span> |
Tuple is used as a Method parameter
1 2 3 4 5 6 7 8 9 10 11 12 13 | static void Main <span class="token punctuation">(</span> string <span class="token punctuation">[</span> <span class="token punctuation">]</span> args <span class="token punctuation">)</span> { var person <span class="token operator">=</span> Tuple <span class="token punctuation">.</span> <span class="token keyword">Create</span> <span class="token punctuation">(</span> <span class="token number">1</span> <span class="token punctuation">,</span> <span class="token string">"Steve"</span> <span class="token punctuation">,</span> <span class="token string">"Jobs"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> DisplayTuple <span class="token punctuation">(</span> person <span class="token punctuation">)</span> <span class="token punctuation">;</span> } static void DisplayTuple <span class="token punctuation">(</span> Tuple <span class="token operator"><</span> <span class="token keyword">int</span> <span class="token punctuation">,</span> string <span class="token punctuation">,</span> string <span class="token operator">></span> person <span class="token punctuation">)</span> { Console <span class="token punctuation">.</span> WriteLine <span class="token punctuation">(</span> $ <span class="token string">"Id = { person.Item1}"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> Console <span class="token punctuation">.</span> WriteLine <span class="token punctuation">(</span> $ <span class="token string">"First Name = { person.Item2}"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> Console <span class="token punctuation">.</span> WriteLine <span class="token punctuation">(</span> $ <span class="token string">"Last Name = { person.Item3}"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> } |
Tuples are used as a return type
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <span class="token comment">//Để dễ hiểu hơn lấy ví dụ thực tế khi bạn có 2 số a và b đầu vào và in ra 4 kết quả là giá trị cộng trừ nhân chia củ 2 số a và b thì sẽ viết như sau:</span> static void Example <span class="token punctuation">(</span> <span class="token punctuation">)</span> { var result <span class="token operator">=</span> Calculator <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> Console <span class="token punctuation">.</span> WriteLine <span class="token punctuation">(</span> <span class="token string">"Ket qua: {0} {1} {2} {3}"</span> <span class="token punctuation">,</span> result <span class="token punctuation">.</span> Item1 <span class="token punctuation">,</span> result <span class="token punctuation">.</span> Item2 <span class="token punctuation">,</span> result <span class="token punctuation">.</span> Item3 <span class="token punctuation">,</span> result <span class="token punctuation">.</span> Item4 <span class="token punctuation">)</span> <span class="token punctuation">;</span> } static Tuple Calculator <span class="token punctuation">(</span> <span class="token punctuation">)</span> { <span class="token keyword">int</span> a <span class="token operator">=</span> <span class="token number">24</span> <span class="token punctuation">,</span> b <span class="token operator">=</span> <span class="token number">9</span> <span class="token punctuation">;</span> <span class="token keyword">return</span> Tuple <span class="token punctuation">.</span> <span class="token keyword">Create</span> <span class="token punctuation">(</span> a <span class="token operator">+</span> b <span class="token punctuation">,</span> a <span class="token operator">-</span> b <span class="token punctuation">,</span> a <span class="token operator">*</span> b <span class="token punctuation">,</span> <span class="token number">1.0</span> <span class="token operator">*</span> a <span class="token operator">/</span> b <span class="token punctuation">)</span> <span class="token punctuation">;</span> } |
Conclude.
You should use Tuple in the following situations:
- When you want to return multiple values from a method that do not want to use
ref
orout
parameters - When you want to pass multiple values to a method via a parameter
- When you want to keep a database record or some temporary values without creating a separate class
You should not use Tuple in the following situations:
- Tuple is a reference data type, not a reference value. So improper use can affect the CPU
- Tuple is limited to 8 elements. You need to use nested data sets if you need to store more elements. However, this can lead to confusion while working
- In the process of getting data from tuple using attribute names such as Items1, Items2 does not look very clear. It will be difficult for the 2nd person to read into the code in the later process.
Wishing everyone a good job.
Reference article from source: https://docs.microsoft.com/en-us/dotnet/csharp/tuples