当前位置: 首页 > news >正文

C# tuple元组详解

概念

本质就是个数据结构,它是将多个数据元素分组成一个轻型数据结构。

如何声明元组变量(针对.net framework 4.7+ 和 .net core 2.0+)

不带字段名称元组

## t1就是个变量 它的类型是元组类型
## 左侧括号定义的是参数列表  等于号右侧就是个t1赋值
## 需要注意等号左右侧 参数个数要一致 且对应位的数据类型要匹配一致
(double, int) t1 = (4.5, 3);

不带字段名称元组的取值

## 使用 变量,ItemN 其中第一位就是Item1 第二位就是Item2 依次类推
var ontValue =t1.Item1;
var twoValue =t1.Item2;
...
var NValue =t1.ItemN;

带字段名称的元组

## 定义方式一 其中A和B就是元组的字段
(double A, int B) t1 = (4.5, 3);
## 定义方式二  其中A和B就是元组的字段
var t1 = (A:4.5, B:3);

带字段名称元组的取值

### 获取字段A和B
double _A=t1.A;
int _B =t1.B;

带字段名称元组的赋值

t1.A =30.8;
t1.B =90;

在.net framework 4.7以下版本

(反正2023-03-18之前没有把上述的新特性加入)
在低版本下需要使用Tuple(静态类)

语法:

Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>
由上面可以看出 除非是嵌套的元组 ,普通的最多只能有8位元素

如何声明元组变量

## 方式一 使用静态方法Create
var t2= Tuple.Create(90, "程序员Ken", 8.05);

## 方式二 
Tuple<int, string, double> t2 = new Tuple<int, string, double>(90, "程序员Ken", 8.05);

取值

### 跟上面的类似 可以看看“不带字段名称元组的取值”
int _item1=t2.Item1;
string _item2 =t2.Item2;
double _item3 =t2.Item3;

嵌套元组

如果要在一个元组中包含八个以上的元素,则可以通过嵌套另一个元组对象作为第八个元素来实现。可以使用Rest属性访问最后一个嵌套元组。要访问嵌套元组的元素,请使用

var numbers = Tuple.Create(1, 2, 3, 4, 5, 6, 7, Tuple.Create(8, 9, 10, 11, 12, 13));
numbers.Item1; // 返回第1个元素 
numbers.Item7; // 返回第7个元素 
numbers.Rest.Item1; //返回就是第8个元素(另一个元组)  实际值(8,9,10,11,12,13)

元组的用法

元组可以在以下情况下使用:

当您想从一个方法中返回多个值而不使用ref 或 out参数时。
当您想通过单个参数将多个值传递给方法时。
当您想暂时保存数据库记录或某些值而不创建单独的类时。。

元组缺点:

Tuple是一个引用类型,而不是一个值类型。它在堆上分配,并可能导致CPU密集型操作。
Tuple被限制为包括八个元素。如果需要存储更多元素,则需要使用嵌套元组。但是,这可能导致歧义。

相关视频:https://www.bilibili.com/video/BV1M84y1A7dp/

相关文章:

  • 服务器配置推荐,如何选择服务器配置
  • 【Bezier + BSpline + CatmullRom】移动机器人曲线路径规划
  • 数字图像处理 基于OpenCV的一种简单的阴影校正的方法
  • mysql数据库常问面试题
  • 2023年Android现代开发
  • 人工智能大模型之ChatGPT原理解析
  • ChatGPT-4.0 : 未来已来,你来不来
  • EEPROM芯片(24c02)使用详解(I2C通信时序分析、操作源码分析、原理图分析)
  • 智能生活垃圾检测与分类系统(UI界面+YOLOv5+训练数据集)
  • 字节跳动软件测试岗,前两面过了,第三面HR天坑!竟然跟我说……
  • Jetson Nano驱动机器人的左右两路电机
  • 西瓜视频登录页面
  • 【文心一言】什么是文心一言,如何获得内测和使用方法。
  • 详解分库分表设计
  • 微信小程序项目实例——扫雷
  • ----------
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • JavaScript异步流程控制的前世今生
  • js中forEach回调同异步问题
  • Koa2 之文件上传下载
  • Lsb图片隐写
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • node.js
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • uni-app项目数字滚动
  • 给第三方使用接口的 URL 签名实现
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 聊聊sentinel的DegradeSlot
  • 三栏布局总结
  • 听说你叫Java(二)–Servlet请求
  • 物联网链路协议
  • 应用生命周期终极 DevOps 工具包
  • 优化 Vue 项目编译文件大小
  • ​业务双活的数据切换思路设计(下)
  • #AngularJS#$sce.trustAsResourceUrl
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (LeetCode) T14. Longest Common Prefix
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (八)Flask之app.route装饰器函数的参数
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (接口封装)
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (转)Linux整合apache和tomcat构建Web服务器
  • .htaccess配置常用技巧
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • [20161214]如何确定dbid.txt
  • [Android]如何调试Native memory crash issue
  • [BZOJ2850]巧克力王国
  • [BZOJ5250][九省联考2018]秘密袭击(DP)
  • [C#]使用DlibDotNet人脸检测人脸68特征点识别人脸5特征点识别人脸对齐人脸比对FaceMesh
  • [C++数据结构](22)哈希表与unordered_set,unordered_map实现
  • [CLickhouse] 学习小计
  • [CSS3备忘] transform animation 等
  • [CUDA 学习笔记] CUDA kernel 的 grid_size 和 block_size 选择
  • [Django ]Django 的数据库操作