Tuple:元组对象在.net中的实用

简介:


 Tuple:元组,一组有序的元素序列。 常常表示成员数目确定,每个成员类型也确定的结构。常常用于表示函数的多个返回值或者查询的结果等。Tuple应当是强类型的,即所有成员的类型在编译时确定。

.net中提供用于创建元组对象的静态方法。

  名称 说明
公共方法 静态成员 受 可移植类库 支持 Create<T1>(T1) 创建新的 1 元组,即单一实例。
公共方法 静态成员 受 可移植类库 支持 Create<T1, T2>(T1, T2) 创建新的 2 元组,即二元组。
公共方法 静态成员 受 可移植类库 支持 Create<T1, T2, T3>(T1, T2, T3) 创建新的 3 元组,即三元组。
公共方法 静态成员 受 可移植类库 支持 Create<T1, T2, T3, T4>(T1, T2, T3, T4) 创建新的 4 元组,即四元组。
公共方法 静态成员 受 可移植类库 支持 Create<T1, T2, T3, T4, T5>(T1, T2, T3, T4, T5) 创建新的 5 元组,即五元组。
公共方法 静态成员 受 可移植类库 支持 Create<T1, T2, T3, T4, T5, T6>(T1, T2, T3, T4, T5, T6) 创建新的 6 元组,即六元组。
公共方法 静态成员 受 可移植类库 支持 Create<T1, T2, T3, T4, T5, T6, T7>(T1, T2, T3, T4, T5, T6, T7) 创建新的 7 元组,即七元组。
公共方法 静态成员 受 可移植类库 支持 Create<T1, T2, T3, T4, T5, T6, T7, T8>(T1, T2, T3, T4, T5, T6, T7, T8)

创建新的 8 元组,即八元组。

元组通常用于通过四种方法:

  • 表示一组数据。 例如,元组可以表示一条数据库记录,并且其组件可以表示记录的各个字段。

  • 提供对数据集的轻松访问和操作。

  • 从方法返回的多个值,而无需使用 out 参数 (在 c# 中) 或 ByRef 参数 (在 Visual Basic 中为)。

  • 通过单个参数将多个值传递给一个方法。 例如, Thread.Start(Object) 方法具有一个可用来提供一个值写入方法线程执行在启动时的单个参数。 如果将Tuple<T1, T2, T3> 对象作为方法参数提供,则可以提供具有三项数据的线程启动例程。

Tuple 类本身并不表示元组。 相反,后者用于创建元组类型的实例提供静态方法从 .NET framework 支持的工厂类。 它提供可调用会实例化元组对象,而不必显式指定每个元组元素的类型的帮助器方法。

尽管可以通过调用其类构造函数创建元组类的实例,这样做的代码可能会相当麻烦的。 下面的示例使用类构造函数创建包含填充数据。一次填充调查的 new york 从 1950 到 2000 年的 7 元组或乘以七倍。

C#
VB
 
var population = new Tuple<string, int, int, int, int, int, int>(
                           "New York", 7891957, 7781984, 
                           7894862, 7071639, 7322564, 8008278);


,如下面的示例所示,使用创建的帮助器方法的同一元组对象更为简单。

C#
VB
 
var population = Tuple.Create("New York", 7891957, 7781984, 7894862, 7071639, 7322564, 8008278);

八个或更多组件的 n 元组

元组是一种数据结构,其中的值具有特定数目和序列。 Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 类表示具有八个或更多组件的 n 元组。

可以通过调用静态 Tuple.Create 方法来实例化恰好包含八个组件的 Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 对象。 下面的示例创建一个8 元组(八元组),其中包含小于 20 的质数 。 注意,它使用类型推理来确定每个组件的类型。

C#
VB
 
var primes = Tuple.Create(2, 3, 5, 7, 11, 13, 17, 19);


还可以通过调用 Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 构造函数来实例化包含八个或更多组件的 n 元组对象。 下面的示例使用 Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 构造函数创建一个 8 元组,该元组等效于前面的示例中创建的元组。

C#
VB
 
var primes = new Tuple<Int32, Int32, Int32, Int32, Int32, Int32, Int32,  
             Tuple<Int32>> (2, 3, 5, 7, 11, 13, 17, new Tuple<Int32>(19));


说明 说明

在九个或多个组件,则创建n元组必须调用 Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 构造函数。 Tuple 类的静态工厂方法并不支持具有多于八个组件的 Tuple 对象的创建。

若要使用 Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 构造函数实例化具有八个或更多组件的 n 元组,必须提供一个作为 rest 参数的泛型 Tuple 对象,以定义该元组的第八到 n 个组件。 通过以这种方式嵌套泛型 Tuple 对象,您可以创建一个对其组件数量没有实际限制的元组。

下面的示例创建一个 17 元组,该元组包含密歇根州底特律从 1860 到 2000 年每次国家普查的人口数据。 该元组的第一个组件为城市名。 第二个组件是数据系列的开始日期,第三个组件是开始日期的人口。 每个后续批次提供以十年为间隔的人口数。 17 元组是通过在 Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 对象内嵌套Tuple<T1, T2, T3> 对象而创建的。 即,Tuple<T1, T2, T3> 对象作为 Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 类构造函数中的 rest 参数的值提供。此Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 对象又嵌套在一个外部 Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 对象中。 即,Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 对象作为外部 Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> 对象的类构造函数中的 rest 参数的值提供。

C#
VB
 
var from1980 = Tuple.Create(1203339, 1027974, 951270);
var from1910 = new Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>> 
    (465766, 993078, 1568622, 1623452, 1849568, 1670144, 1511462, from1980);
var population = new Tuple<string, int, int, int, int, int, int,
    Tuple<int, int, int, int, int, int, int, Tuple<int, int, int>>> 
    ("Detroit", 1860, 45619, 79577, 116340, 205876, 285704, from1910);


通过使用只读 Item1Item2Item3Item4Item5Item6 和 Item7 实例属性,可以检索元组的前七个组件的值。 任何其他组件都是嵌套的,可以从 Rest 属性中检索到。 在前一个示例中,Item1 到 Item7 属性检索元组的第一到七个组件。 第八到十四个组件包含在第二层嵌套的元组中,并由 Rest.Item1 到 Rest.Item7 属性表示。 第十五到十七个组件包含在第三层嵌套的元组中,并由 Rest.Rest.Item1 到 Rest.Rest.Item3 属性表示。

元组通常有四种不同的使用方式:

  • 表示一组数据。 例如,元组可以表示一条数据库记录,并且其组件可以表示记录的各个字段。

  • 提供对数据集的轻松访问和操作。

  • 在不使用 out 参数(在 C# 中)或 ByRef 参数(在 Visual Basic)的情况下,从方法中返回多个值。 例如,前一个示例在 Tuple<T1, T2, T3, T4, T5, T6, T7>对象中除返回城市名称外,还返回计算所得的统计信息。

  • 通过单个参数将多个值传递给一个方法。 例如,Thread.Start(Object) 方法有一个单一参数,可以使用该参数向在启动时线程执行的方法提供一个值。 如果将Tuple<T1, T2, T3, T4, T5, T6, T7> 对象作为方法参数提供,则可以提供具有七项数据的线程启动例程。


本文转自 huohe2009 51CTO博客,原文链接:http://blog.51cto.com/zhaojie/979852

相关文章
|
Python
Python元组tuple“删除”元素的两种函数代码设计
实际上,Python的tuple元组内的元素是不能被修改的,因此也是无法被删除的,但是,为了移除Python元组tuple内的某些元素,以获得一个新的元组,还是有其办法存在的。比如,我们可以使用for循环添加的方法,来创建一个不包含那些需要被移除的元素的新元组。Python中元组添加元素的内置方法为__add__()方法,实际上,该方法也是
159 4
|
存储 索引 Python
元组(Tuple)在Python编程中的应用与实例
元组(Tuple)在Python编程中的应用与实例
464 2
|
存储 缓存 索引
python 的 tuple(元组) 是不是冗余设计?
python 的 tuple(元组) 是不是冗余设计?
206 4
|
存储 数据库 C++
"深入剖析Python元组(tuple):与列表的对比、特性解析及高效应用场景展示"
【8月更文挑战第9天】Python元组与列表虽均用于存储元素集合,但有本质差异。元组不可变,创建后无法修改,适合保护数据不被意外更改的场景,如作字典键或传递固定值。列表则可变,支持动态增删改,适用于需频繁调整的数据集。元组因不可变性而在性能上有优势,可用于快速查找。两者各有千秋,根据具体需求选择使用。例如,元组可用于表示坐标点或日期,而列表更适合管理用户列表或库存。
527 1
|
存储 缓存 Python
Python中的列表(List)和元组(Tuple)是两种重要的数据结构
【7月更文挑战第12天】Python中的列表(List)和元组(Tuple)是两种重要的数据结构
198 1
|
JavaScript 网络架构 存储
6.【TypeScript 教程】TypeScript 元组(Tuple)
6.【TypeScript 教程】TypeScript 元组(Tuple)
93 2
|
开发框架 .NET API
ASP.NET Core Web中使用AutoMapper进行对象映射
ASP.NET Core Web中使用AutoMapper进行对象映射
148 1
|
存储 语音技术 Python
语音识别,函数综合案例,黑马ATM,/t/t一个对不齐,用两个/t,数据容器入门,数据容器可以分为列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)
语音识别,函数综合案例,黑马ATM,/t/t一个对不齐,用两个/t,数据容器入门,数据容器可以分为列表(list)、元组(tuple)、字符串(str)、集合(set)、字典(dict)
【Python 基础】列表(list)和元组(tuple)有什么区别?
【5月更文挑战第6天】【Python 基础】列表(list)和元组(tuple)有什么区别?
|
存储 安全 Java
Python教程第3章 | 集合(List列表、Tuple元组、Dict字典、Set)
Python 列表、无序列表、字典、元组增删改查基本用法和注意事项
214 1