开局一张图,首先声明的是 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相关推荐

  1. python往list中添加tuple

    有些时候,我们需要往一个list中新添tuple数据,但是直接添加是会报错的,如下: >>> a = [] >>> a+(1,2) Traceback (most ...

  2. C++11中std::tuple的使用

    std::tuple是类似pair的模板.每个pair的成员类型都不相同,但每个pair都恰好有两个成员.不同std::tuple类型的成员类型也不相同,但一个std::tuple可以有任意数量的成员 ...

  3. python中的tuple_Python中的tuple元组详细介绍

    Tuple 是不可变 list. 一旦创建了一个 tuple 就不能以任何方式改变它. Tuple 与 list 的相同之处 定义 tuple 与定义 list 的方式相同, 除了整个元素集是用小括号 ...

  4. [转载] python中元组(tuple)用法总结

    参考链接: Python | tuple函数 一.tuple也是一个class,是不可变的list类型,不可以增删改. 创建: tup1 = ('physics', 'chemistry', 1997 ...

  5. Python中list,tuple,dict,set的区别和用法

    Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, tuple, dict, set.这里对他们进行一个简明的总结. List ...

  6. 【一起读源码】1. Java 中元组 Tuple

    1.1 问题描述 使用 Java 做数据分析.机器学习的时候,常常需要对批量的数据进行处理,如果需要处理的数据的维度不超过10时,可以考虑使用 org.javatuples 提供的 Tuple 类工具 ...

  7. tuple在python中什么意思_在Python中,*tuple和**dict是什么意思?

    在函数调用中 *t表示"将此元组的元素作为此函数调用的位置参数."def foo(x, y): print(x, y) >>> t = (1, 2) >&g ...

  8. python中元组(tuple)用法总结

    一.tuple也是一个class,是不可变的list类型,不可以增删改. 创建: tup1 = ('physics', 'chemistry', 1997, 2000); tup2 = (1, 2, ...

  9. Python中的tuple

    1.空的tuple:     tup1 = (); 2.只含有一个元素的tuple: tup1 = (50,); #注意,必须有,尽管只有一个元素 3Delete Tuple Elements: Re ...

最新文章

  1. C#和JavaScript的简单互交
  2. map for循环_Java_foundations_1 如何遍历Map
  3. 在linux、optee、ATF中的中断异常向量表
  4. Python中下划线---完全解读
  5. mysql8创建用户并授权_新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接
  6. 可信计算 沈昌祥_沈昌祥院士:用主动免疫可信计算构筑车联网安全防线
  7. 带有输出参数的存储过程
  8. vue-cli的webpack模板项目配置文件说明
  9. 基于TMS320VC5507的语音识别系统实现
  10. Android UI设计--ListView Item的OnItemLongClickListener同时监听两种事件
  11. 在vscode中使用ajax,vscode中的ajax片段,
  12. nv21转jpg c语言,Yuv420转Jpeg(C语言实现)
  13. ASP.NET MVC架构与实战系列之三:MVC控件解析
  14. 华为浏览器工具箱 html修改,华为手机修改浏览器模式为电脑浏览模式的方法
  15. 国内AGV机器人厂家数目统计及区域分布分析
  16. python ----Parser使用
  17. 统计图表之桑基图 sankey diagram
  18. 图像增强(拉普拉斯锐化增强)
  19. 极速进阶,小i智慧学堂联合复旦大学教授推出人工智能冬令营
  20. 团队管理中,如何提升团队执行力?

热门文章

  1. c++简单程序设计-5
  2. geotrellis使用(二十九)迁移geotrellis至1.1.1版
  3. spring+springMvc+mybatis 调用oracle 存储过程
  4. oracle基于时间恢复整个数据库
  5. Mysql+Navicat for Mysql
  6. php v9 上传_phpcms v9 表单添加文件上传字段
  7. java启动mysq服务_Java Web开发——MySQL数据库的安装与配置
  8. 洛谷——P1305 新二叉树(新建二叉树以及遍历)
  9. C#如何用正则表达式截取https和带端口的域名
  10. 使用Network Recycle Bin启用映射网络驱动器上的回收站