- C#元组有什么需要?
- 创建一个元组
- 访问元组
- 嵌套元组
- 元组作为方法参数
- 元组作为返回类型
元组的特征:
- 它使我们可以将多个数据表示为一个数据集。
- 它使我们能够创建, 操作和访问数据集。
- 它从方法返回多个值, 而无需使用出参数。
- 它还可以存储重复的元素。
- 它允许我们借助单个参数将多个值传递给方法。
出于另一个原因, 试想一下你想存储雇员在一个实体中, 例如姓名, EmpID, 血型, 联系电话。现在想到的最常见的方法是创建一个将包含必填字段的数据结构。这就是Tuples发挥作用的地方。使用元组, 无需创建任何单独的数据结构。相反, 在这种情况下, 你可以使用元组< T1, T2, T3, T4> .
最常见的数据结构(例如Array, List等)仅属于特定类型, 并且可以存储无限元素。但是元组能够存储有限数量的元素, 即8可以是任何类型。
创建一个元组在C#中, 主要有两种创建元组的方法, 如下所示:
使用元组类的构造函数:
你可以使用提供的构造函数创建一个元组
元组< T> 类
。你可以在其中存储类型从1到8的元素。但是, 不允许在一个元组中存储大于8的元素。如果尝试这样做, 则编译器将引发错误。
语法如下:
// Constructor for single elementsTuple <
T1>
(T1)// Constructor for two elementsTuple <
T1, T2>
(T1, T2)... // Constructor for eight elementsTuple <
T1, T2, T3, T4, T5, T6, T7, TRest>
(T1, T2, T3, T4, T5, T6, T7, TRest)
例子:
// C# program to create tuple using tuple constructor.
using System;
public class GFG{// Main method
static public void Main (){// Tuple with one element
Tuple<
string >
My_Tuple1 = new Tuple<
string >
( "lsbin" );
// Tuple with three elements
Tuple<
string , string , int >
My_Tuple2 = new Tuple<
string , string , int >
( "Romil" , "Python" , 29);
// Tuple with eight elements
Tuple<
int , int , int , int , int , int , int , Tuple<
int >
>
My_Tuple3 = new Tuple<
int , int , int , int , int , int , int , Tuple<
int >
>
(1, 2, 3, 4, 5, 6, 7, new Tuple<
int >
(8));
}
}
使用创建方法:
当我们使用元组构造函数创建元组时, 我们需要提供存储在元组中的每个元素的类型, 这会使你的代码繁琐。因此, C#提供了另一个名为Tuple的类, 该类包含用于创建tuple对象的静态方法, 而无需提供每个元素的类型。
语法如下:
// Method for 1-tupleCreate(T1)// Method for 2-tupleCreate(T1, T2)...// Method for 8-tupleCreate(T1, T2, T3, T4, T5, T6, T7, T8)
例子:
// C# program to create tuple
// using Create Method
using System;
public class GFG {// Main method
static public void Main()
{// Creating 1-tuple
// Using Create Method
var My_Tuple1 = Tuple.Create( "lsbin" );
// Creating 4-tuple
// Using Create Method
var My_Tuple2 = Tuple.Create(12, 30, 40, 50);
// Creating 8-tuple
// Using Create Method
var My_Tuple3 = Tuple.Create(13, "Geeks" , 67, 89.90, 'g' , 39939, "geek" , 10);
}
}
访问元组你可以使用来访问元组的元素Item < elementNumber> 属性, 这里elementNumber是1到7之间的数字, 例如Item1, Item 2, Item3, Item4, Item5, Item6, Item 7等。通过使用Rest属性可以访问8元组的最后一个元素。如下例所示:
例子:
// C# program to access the tuple
// using Item and Rest property
using System;
public class GFG {// Main method
static public void Main()
{// Creating 1-tuple
// Using Create Method
var My_Tuple1 = Tuple.Create( "lsbin" );
// Accessing the element of Tuple
// Using Item property
Console.WriteLine( "Element of My_Tuple1: " + My_Tuple1.Item1);
Console.WriteLine();
// Creating 4-tuple
// Using Create Method
var My_Tuple2 = Tuple.Create(12, 30, 40, 50);
// Accessing the element of Tuple
// Using Item property
Console.WriteLine( "Element of My_Tuple2: " + My_Tuple2.Item1);
Console.WriteLine( "Element of My_Tuple2: " + My_Tuple2.Item2);
Console.WriteLine( "Element of My_Tuple2: " + My_Tuple2.Item3);
Console.WriteLine( "Element of My_Tuple2: " + My_Tuple2.Item4);
Console.WriteLine();
// Creating 8-tuple
// Using Create Method
var My_Tuple3 = Tuple.Create(13, "Geeks" , 67, 89.90, 'g' , 39939, "geek" , 10);
// Accessing the element of Tuple
// Using Item property
// And print the 8th element of tuple
// using Rest property
Console.WriteLine( "Element of My_Tuple3: " + My_Tuple3.Item1);
Console.WriteLine( "Element of My_Tuple3: " + My_Tuple3.Item2);
Console.WriteLine( "Element of My_Tuple3: " + My_Tuple3.Item3);
Console.WriteLine( "Element of My_Tuple3: " + My_Tuple3.Item4);
Console.WriteLine( "Element of My_Tuple3: " + My_Tuple3.Item5);
Console.WriteLine( "Element of My_Tuple3: " + My_Tuple3.Item6);
Console.WriteLine( "Element of My_Tuple3: " + My_Tuple3.Item7);
Console.WriteLine( "Element of My_Tuple3: " + My_Tuple3.Rest);
}
}
输出如下:
Element of My_Tuple1: lsbinElement of My_Tuple2: 12Element of My_Tuple2: 30Element of My_Tuple2: 40Element of My_Tuple2: 50Element of My_Tuple3: 13Element of My_Tuple3: GeeksElement of My_Tuple3: 67Element of My_Tuple3: 89.9Element of My_Tuple3: gElement of My_Tuple3: 39939Element of My_Tuple3: geekElement of My_Tuple3: (10)
嵌套元组在C#中, 允许你将一个元组创建到另一个元组中。当你想在同一元组中添加八个以上的元素时, 可以使用嵌套元组。可以通过使用Rest属性来访问嵌套元组, 如示例1所示。你可以在序列中的任何位置添加嵌套元组, 但是建议你将嵌套元组放置在序列的末尾, 以便于他们轻松地进行操作。从Rest属性访问。如果你将嵌套元组放置在最后一个位置之外, 则可以根据Item < elementNumber> 属性访问该元组, 如示例2所示。
范例1:
// C# program to illustrate nested tuple
using System;
public class GFG{// Main method
static public void Main ()
{// Nested Tuple
var My_Tuple = Tuple.Create(13, "Geeks" , 67, 89.90, 'g' , 39939, "geek" , Tuple.Create(12, 30, 40, 50));
// Accessing the element of Tuple
// Using Item property
// And accessing the elements of nested tuple
// Using Rest property
Console.WriteLine( "Element of My_Tuple: " +My_Tuple.Item1);
Console.WriteLine( "Element of My_Tuple: " +My_Tuple.Item2);
Console.WriteLine( "Element of My_Tuple: " +My_Tuple.Item3);
Console.WriteLine( "Element of My_Tuple: " +My_Tuple.Item4);
Console.WriteLine( "Element of My_Tuple: " +My_Tuple.Item5);
Console.WriteLine( "Element of My_Tuple: " +My_Tuple.Item6);
Console.WriteLine( "Element of My_Tuple: " +My_Tuple.Item7);
Console.WriteLine( "Element of Nested tuple: " +My_Tuple.Rest);
Console.WriteLine( "Element of Nested tuple: " +My_Tuple.Rest.Item1.Item1);
Console.WriteLine( "Element of Nested tuple: " +My_Tuple.Rest.Item1.Item2);
Console.WriteLine( "Element of Nested tuple: " +My_Tuple.Rest.Item1.Item3);
Console.WriteLine( "Element of Nested tuple: " +My_Tuple.Rest.Item1.Item4);
}
}
输出如下:
Element of My_Tuple: 13Element of My_Tuple: GeeksElement of My_Tuple: 67Element of My_Tuple: 89.9Element of My_Tuple: g Element of My_Tuple: 39939Element of My_Tuple: geekElement of Nested tuple: ((12, 30, 40, 50))Element of Nested tuple: 12Element of Nested tuple: 30Element of Nested tuple: 40Element of Nested tuple: 50
【C#元组解析和用法详细指南】范例2:
// C# program to illustrate nested tuple
using System;
public class GFG{// Main method
static public void Main ()
{// Nested Tuple
// Here nested tuple is present
// at the place of 2nd element
var My_Tuple = Tuple.Create(13, Tuple.Create(12, 30, 40, 50), 67, 89.90, 'g' , 39939, 123, "geeks" );
// Accessing the element of Tuple
// Using Item property
// And accessing the elements of
// nested tuple Using Rest property
Console.WriteLine( "Element of My_Tuple: " +My_Tuple.Item1);
Console.WriteLine( "Element of Nested Tuple: " +My_Tuple.Item2.Item1);
Console.WriteLine( "Element of Nested Tuple: " +My_Tuple.Item2.Item2);
Console.WriteLine( "Element of Nested Tuple: " +My_Tuple.Item2.Item3);
Console.WriteLine( "Element of Nested Tuple: " +My_Tuple.Item2.Item4);
Console.WriteLine( "Element of My_Tuple: " +My_Tuple.Item3);
Console.WriteLine( "Element of My_Tuple: " +My_Tuple.Item4);
Console.WriteLine( "Element of My_Tuple: " +My_Tuple.Item5);
Console.WriteLine( "Element of My_Tuple: " +My_Tuple.Item6);
Console.WriteLine( "Element of My_Tuple: " +My_Tuple.Item7);
Console.WriteLine( "Element of My_Tuple: " +My_Tuple.Rest);
}
}
输出如下:
Element of My_Tuple: 13Element of Nested Tuple: 12Element of Nested Tuple: 30Element of Nested Tuple: 40Element of Nested Tuple: 50Element of My_Tuple: 67Element of My_Tuple: 89.9Element of My_Tuple: gElement of My_Tuple: 39939Element of My_Tuple: 123Element of My_Tuple: (geeks)
元组作为方法参数在C#中, 允许你将元组作为方法参数传递, 如以下示例所示。这里我们传递了一个名为元组在里面PrintTheTuple()方法和元组的元素是通过使用Item < elementNumber> 属性访问的。
例子:
// C# program to illustrate the
// tuple as a method parameter.
using System;
public class GFG{// Main method
static public void Main ()
{// Creating a tuple
var mytuple = Tuple.Create( "lsbin" , 123, 90.8);
// Pass the tuple in the
// PrintTheTuple method
PrintTheTuple(mytuple);
}static void PrintTheTuple(Tuple<
string , int , double >
mytuple)
{
Console.WriteLine( "Element: " +mytuple.Item1);
Console.WriteLine( "Element: " +mytuple.Item2);
Console.WriteLine( "Element: " +mytuple.Item3);
}
}
输出如下:
Element: lsbinElement: 123Element: 90.8
元组作为返回类型在C#中, 方法被允许使用元组作为返回类型。换句话说, 方法可以返回一个元组, 如下面的示例所示:
例子:
// C# program to illustrate
// how a method return tuple
using System;
public class GFG{// Main Method
static public void Main ()
{
// Return tuple is stored in mytuple
var mytuple = PrintTuple();
Console.WriteLine(mytuple.Item1);
Console.WriteLine(mytuple.Item2);
Console.WriteLine(mytuple.Item3);
}// PrintTuple method return a tuple
static Tuple<
string , string , string >
PrintTuple()
{
return Tuple.Create( "Geeks" , "For" , "Geeks" );
}
}
输出如下:
GeeksForGeeks
元组的局限性:
- 它是引用类型, 而不是值类型。
- 它限于八个元素。意味着如果没有嵌套元组, 则不能存储八个以上的元素。
- 这些只能通过使用来访问Item < elementNumber> 属性.
推荐阅读
- 迭代堆排序解析和详细实现介绍
- 深入浅出编译原理简明教程(四)(词法分析的编码实现、词法分析生成器和正则表达式)
- 深入浅出编译原理简明教程(三)(语法分析的运行处理机制)
- 深入浅出编译原理简明教程(二)(编译器的逻辑结构、编译过程和编译实例)
- 深入浅出编译原理简明教程(一)(什么是编译(编译原理的学习介绍和好处))
- 如何更容易地快速学会网格布局(CSS Grid Layout内容补充(四))
- 如何更容易地快速学会网格布局(响应式网格布局高阶实战(模仿SegmentFault首页(三)))
- 如何更容易地快速学会网格布局(CSS Grid Layout进阶设计实战(模仿京东女装首页(二)))
- 如何更容易地快速学会网格布局(CSS Grid Layout基本设置入门教程详解(一))