如何使用 C# 中的 Tuple
开局一张图,首先声明的是 Tuple 不是什么新鲜概念,在编程语言 F#,Python 中早就有这个了,Tuple 是一种 有序的,有限不可变的,支持混杂类型的固定个数的 一种数据结构,有些朋友可能就想问了,这里的混杂
是什么意思?其实就是说 Tuple 中的若干元素类型,即可以是同类型,也可以是不同类型。
值得注意的是,Tuple 中的元素是 只读的,而且其元素的顺序也是在 Tuple 创建的时候指定好的,不能对其中的元素进行后续修改 也不能修改 Tuple 的大小。
为什么要使用 Tuple
下面罗列了几种使用 Tuple 的场景:
如果你的方法需要返回多个值 或者 方法需要传递多个值。
如果你不想为某些功能专门去定义一个类。
如果你有若干个混杂元素,并且想提供对其简单的访问方式。
上面三种情况都是 Tuple 最擅长的应用场景,值得用 Tuple 去解决。
有些朋友可能会想到 匿名类
,但仔细想想, 匿名类 也有其缺陷,比如说方法的返回值是不可能指定为匿名类型的,对吧。
当然 Tuple 也是有缺陷的,罗列如下:
当你访问 Tuple 中的元素时,你会发现只能使用 Item1, Item2, Item3 这样的形式,很显然这种太不易读了,而且一旦 Tuple 中的元素过多,维护起来也是一种负担。
Tuple 是引用类型不是值类型,意味着它会在
托管堆
上进行内存分配,如果 Tuple 过大并且没有很好的释放,对程序也是一个不小的性能挑战。
C# 中使用 Tuple
叨叨叨的说了这么多,接下来看看如何使用,在 C# 中提供了一个 Tuple
类,这个类下有一个静态方法 Create
可用来生成 Tuple 实例,顺便提一下,这个 Create 方法提供了 8 个重载方法,下面展示了这些方法签名清单。
public static class Tuple
{public static Tuple<T1> Create<T1>(T1 item1){return new Tuple<T1>(item1);}public static Tuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2){return new Tuple<T1, T2>(item1, item2);}public static Tuple<T1, T2, T3> Create<T1, T2, T3>(T1 item1, T2 item2, T3 item3){return new Tuple<T1, T2, T3>(item1, item2, item3);}public static Tuple<T1, T2, T3, T4> Create<T1, T2, T3, T4>(T1 item1, T2 item2, T3 item3, T4 item4){return new Tuple<T1, T2, T3, T4>(item1, item2, item3, item4);}public static Tuple<T1, T2, T3, T4, T5> Create<T1, T2, T3, T4, T5>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5){return new Tuple<T1, T2, T3, T4, T5>(item1, item2, item3, item4, item5);}public static Tuple<T1, T2, T3, T4, T5, T6> Create<T1, T2, T3, T4, T5, T6>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6){return new Tuple<T1, T2, T3, T4, T5, T6>(item1, item2, item3, item4, item5, item6);}public static Tuple<T1, T2, T3, T4, T5, T6, T7> Create<T1, T2, T3, T4, T5, T6, T7>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7){return new Tuple<T1, T2, T3, T4, T5, T6, T7>(item1, item2, item3, item4, item5, item6, item7);}public static Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>> Create<T1, T2, T3, T4, T5, T6, T7, T8>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, T8 item8){return new Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>>(item1, item2, item3, item4, item5, item6, item7, new Tuple<T8>(item8));}
}
接下来看看如何创建和初始化 Tuple。
var listEmployee = new List<Tuple<int, string, string>>{Tuple.Create(1, "Joydip Kanjilal", "INDIA"),Tuple.Create(2, "Michael Stevens", "USA" ),Tuple.Create(3, "Steve Barnes", "USA" )};
一旦你的 Tuple 创建并初始化好,你可以像迭代其他集合一样迭代 Tuple,下面的代码清单展示了如何去实现。
foreach (Tuple<int, string, string> tuple in listEmployee){Console.WriteLine(tuple.Item2);}
下面是完整的代码清单展示了如何去 创建,初始化,迭代。
static void Main(string[] args){var listEmployee = new List<Tuple<int, string, string>>{Tuple.Create(1, "Joydip Kanjilal", "INDIA"),Tuple.Create(2, "Michael Stevens", "USA" ),Tuple.Create(3, "Steve Barnes", "USA" )};foreach (Tuple<int, string, string> tuple in listEmployee){Console.WriteLine(tuple.Item2);}Console.Read();}
你也可以创建 嵌套的 Tuple,如下代码所示:
static void Main(string[] args){var tuple = Tuple.Create(1, "Joydip Kanjilal", new Tuple<string, string>("Hyderabad", "India"));}
译文链接:https://www.infoworld.com/article/3095242/how-to-work-with-a-tuple-in-c.html
如何使用 C# 中的 Tuple相关推荐
- python往list中添加tuple
有些时候,我们需要往一个list中新添tuple数据,但是直接添加是会报错的,如下: >>> a = [] >>> a+(1,2) Traceback (most ...
- C++11中std::tuple的使用
std::tuple是类似pair的模板.每个pair的成员类型都不相同,但每个pair都恰好有两个成员.不同std::tuple类型的成员类型也不相同,但一个std::tuple可以有任意数量的成员 ...
- python中的tuple_Python中的tuple元组详细介绍
Tuple 是不可变 list. 一旦创建了一个 tuple 就不能以任何方式改变它. Tuple 与 list 的相同之处 定义 tuple 与定义 list 的方式相同, 除了整个元素集是用小括号 ...
- [转载] python中元组(tuple)用法总结
参考链接: Python | tuple函数 一.tuple也是一个class,是不可变的list类型,不可以增删改. 创建: tup1 = ('physics', 'chemistry', 1997 ...
- Python中list,tuple,dict,set的区别和用法
Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, tuple, dict, set.这里对他们进行一个简明的总结. List ...
- 【一起读源码】1. Java 中元组 Tuple
1.1 问题描述 使用 Java 做数据分析.机器学习的时候,常常需要对批量的数据进行处理,如果需要处理的数据的维度不超过10时,可以考虑使用 org.javatuples 提供的 Tuple 类工具 ...
- tuple在python中什么意思_在Python中,*tuple和**dict是什么意思?
在函数调用中 *t表示"将此元组的元素作为此函数调用的位置参数."def foo(x, y): print(x, y) >>> t = (1, 2) >&g ...
- python中元组(tuple)用法总结
一.tuple也是一个class,是不可变的list类型,不可以增删改. 创建: tup1 = ('physics', 'chemistry', 1997, 2000); tup2 = (1, 2, ...
- Python中的tuple
1.空的tuple: tup1 = (); 2.只含有一个元素的tuple: tup1 = (50,); #注意,必须有,尽管只有一个元素 3Delete Tuple Elements: Re ...
最新文章
- C#和JavaScript的简单互交
- map for循环_Java_foundations_1 如何遍历Map
- 在linux、optee、ATF中的中断异常向量表
- Python中下划线---完全解读
- mysql8创建用户并授权_新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接
- 可信计算 沈昌祥_沈昌祥院士:用主动免疫可信计算构筑车联网安全防线
- 带有输出参数的存储过程
- vue-cli的webpack模板项目配置文件说明
- 基于TMS320VC5507的语音识别系统实现
- Android UI设计--ListView Item的OnItemLongClickListener同时监听两种事件
- 在vscode中使用ajax,vscode中的ajax片段,
- nv21转jpg c语言,Yuv420转Jpeg(C语言实现)
- ASP.NET MVC架构与实战系列之三:MVC控件解析
- 华为浏览器工具箱 html修改,华为手机修改浏览器模式为电脑浏览模式的方法
- 国内AGV机器人厂家数目统计及区域分布分析
- python ----Parser使用
- 统计图表之桑基图 sankey diagram
- 图像增强(拉普拉斯锐化增强)
- 极速进阶,小i智慧学堂联合复旦大学教授推出人工智能冬令营
- 团队管理中,如何提升团队执行力?
热门文章
- c++简单程序设计-5
- geotrellis使用(二十九)迁移geotrellis至1.1.1版
- spring+springMvc+mybatis 调用oracle 存储过程
- oracle基于时间恢复整个数据库
- Mysql+Navicat for Mysql
- php v9 上传_phpcms v9 表单添加文件上传字段
- java启动mysq服务_Java Web开发——MySQL数据库的安装与配置
- 洛谷——P1305 新二叉树(新建二叉树以及遍历)
- C#如何用正则表达式截取https和带端口的域名
- 使用Network Recycle Bin启用映射网络驱动器上的回收站