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

元组可以比较大小吗?一次返回多个值?编程语言的元组?声明变量一定需要指定类型吗?

目录

元组可以比较大小吗?

一次返回多个值?

编程语言的元组

支持元组的语言

元组的基本特性

元组的初始化和使用

声明变量一定需要指定类型吗?

var类型


元组可以比较大小吗?

不同编程语言对元组的定位稍有差异,是否可以比较大小随语言而定。

  • Swift支持元组比较大小,基本规则是元组不同元素按数值大小或者字符串字典顺序比较大小,类似于字符串比较。
  • C++11引入元组,C++17支持元组比较大小,前提是所有元素真的可以做比较。

一次返回多个值?

没有元组概念的编程语言,一次返回多个值必须使用结构体、构造数组/列表或者额外利用指针类型参数传入并修改传出(C#使用ref或out修饰符)来完成。

  • 元组作为包含多个值的类型,是实现此功能的最优雅方式,当然,如果需要修改外部变量,还是需要指针。

编程语言的元组

元组(tuple)是一个有趣的数组组合,为了方便多个数据统一赋值使用,避免额外建立临时结构体或者对象的开销,也简化一些逻辑代码的编写。 tuple是一种数据结构,可以存储多个元素,尽管元素可以是不同的数据类型,在某些时候,函数返回值可能超过一个类型,tuple很好地解决了这个问题。例如,加法会返回sum和overflow标志。支持元组的编程语言并不多,C#/Python/Swift/Rust 等语言都支持元组。

支持元组的语言

  • C#/Python/Swift/Rust/C++11/仓颉 等都支持元组。
    • C# 7.0.
  • C/ObjC/Java/PHP没有内置元组。

可以用结构体模拟元组。

元组的基本特性

  • 长度不可变,元组内容不可变。注意,是元组的内容不可变,元组整体所代表的变量是可被重新赋值的。

元组的初始化和使用

  • C# 在.NET Framework 4.0就有Tuple,但创建方式有点复杂,C# 7.0引入ValueTuple,创建更方便。
    例如创建result元组: (int, string) result = (1, "OK"); 可通过result.Item1和result.Item2访问两个元素的值。
    • (int age, string name) = (20, "Bob");
    • (int age, string name) p = (21, "Alice");
    • int age; string name; (age, name) = (22, "Charlie");
    • var p = (23, "Ken");
  • Swift 创建元组:
    let result = (ret: 1, err_info: "OK")
    print(result.ret, result.err_info)

声明变量一定需要指定类型吗?

早期编程语言都需要指定变量类型,随着编程语言不断发展,新的编程语言允许编译器自动推导变量类型,允许不指定变量类型。

  • C/ObjC声明变量必须指定类型。
  • C++ 11 (2011年)引入auto关键字,可自动推导类型。
  • C# 3.0 (2007年)引入var关键字可自动推导类型。这种变量也被称为隐式类型的局部变量,和C++ auto类似。
    当然,不止是简单类型变量,对于一些组合的复杂类型,var可避免单独定义类型。当然,元组也可以解决这种需求,根据需要而选。
  • Java 10 (2018年)引入var关键字,同样可以自动推导类型。
  • Python/Shell/JS 之类的解释型语言,根本无需指定变量类型,解释器会默默分析。
  • VB 8之前声明变量必须指定类型,VB 9(包括)之后不一定要指定,可选择编译器自动推导类型。
  • Go/Rust/Swift/仓颉 都可选择由编译器自动推导类型。

var类型

不同编程语言可能有var类型,但它们可能是不同含义。

  • C# var声明方便了程序员不用写实际类型,但编译器会自动判断出实际类型,编译的IL代码和用实际类型没区别。
    • 类似的,Go/Rust有自动类型推导,和C#一样,编译器会推导出类型。
    • JS的var就截然不同,它仅仅代表一种类型,编译器并没有看到var推导更多信息,只是作为变量声明或定义的标志。


若文章对您有帮助,欢迎关注 程序员小迷 。助您在编程路上越走越好!

微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是 程序员小迷 (致力于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

http://www.lryc.cn/news/2387705.html

相关文章:

  • PXC集群
  • 线程安全问题的成因
  • 零基础远程连接课题组Linux服务器,安装anaconda,配置python环境(换源),在服务器上运行python代码【3/3 适合小白,步骤详细!!!】
  • 字节跳动BAGEL-7B-MoT模型开源:多模态AI技术的新范式与行业涟漪
  • Ubuntu静态IP配置信息查看命令
  • unity实现wasd键控制汽车漫游
  • Python优雅执行SSH命令:10种方法+虚拟环境深度实践
  • Linux TCP与Socket与IO多路复用(Epoll)
  • LINUX安装运行jeelowcode后端项目(命令行)
  • 嵌入式高级工程师面试全解:从 malloc 到 kernel panic 的系统知识梳理
  • 机器学习第二十七讲:Kaggle → 参加机器学习界的奥林匹克
  • C++(初阶)(二十)——封装实现set和map
  • 【MySQL】06.内置函数
  • 企业微信内部网页开发流程笔记
  • 智慧在线判题OJ系统项目总体,包含功能开发思路,内部中间件,已经部分知识点
  • 【MySQL】2-MySQL索引P2-执行计划
  • 云电脑显卡性能终极对决:ToDesk云电脑/顺网云/海马云,谁才是4K游戏之王?
  • 11 接口自动化-框架封装之统一请求封装和接口关联封装
  • influxdb时序数据库
  • OpenCV CUDA模块图像处理------颜色空间处理之用于执行伽马校正(Gamma Correction)函数gammaCorrection()
  • 机器学习10-随机森林
  • 商品条形码查询接口如何用C#进行调用?
  • 编译pg_duckdb步骤
  • 多模态大语言模型arxiv论文略读(九十一)
  • 攻防世界 - MISCall
  • 数据结构测试模拟题(2)
  • 在PyTorch中,对于一个张量,如何快速为多个元素赋值相同的值
  • 苍穹外卖--Redis
  • C++ 条件变量虚假唤醒问题的解决
  • 深度学习————注意力机制模块