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

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

目录

元组可以比较大小吗?

一次返回多个值?

编程语言的元组

支持元组的语言

元组的基本特性

元组的初始化和使用

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

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.xdnf.cn/news/8715.html

相关文章:

  • Ubuntu20.04 gr-gsm完整安装教程
  • Kanass V1.1.1版本发布,支持查看项目/迭代/事项进度
  • 剖析 Spring 中 @ResponseBody 原理与 Tomcat NIO 写事件(SelectionKey.OP_WRITE)的协作机制
  • MySQL分库分表
  • vue3中使用computed
  • Spark集群架构解析:核心组件与Standalone、YARN模式深度对比(AM,Container,Driver,Executor)
  • kafka之操作示例
  • 大文件上传,对接阿里oss采用前端分片技术。完成对应需求!
  • 【MySQL】第7节|Mysql锁机制与优化实践以及MVCC底层原理剖析
  • ubuntu 安装latex
  • 清除 Ubuntu 磁盘空间
  • 安卓开发用到的设计模式(2)结构型模式
  • 开发者工具箱-鸿蒙金额转换开发笔记
  • R语言学习--Day08--bootstrap原理及误区
  • Ollama01-安装教程
  • 【MySQL】07.表内容的操作
  • Android 16系统源码_自由窗口(一)触发自由窗口模式
  • Gateway全局过滤器:接口耗时统计与黑白名单配置
  • R语言科研编程-柱状图
  • STM32 定时器输出比较深度解析:从原理到电机控制应用 (详解)
  • 黑马点评双拦截器和Threadlocal实现原理
  • 行列式的线性性质(仅限于单一行的加法拆分)
  • 电机控制储备知识学习(五) 三项直流无刷电机(BLDC)学习(四)
  • 思科硬件笔试面试题型解析
  • 7:OpenCV—图像形态学处理
  • 深度学习实战:从图像分类到文本生成的完整案例解析
  • DAY 35 模型可视化与推理
  • 力扣面试150题--求根节点到叶节点数字之和
  • 如何屏蔽mac电脑更新提醒,禁止系统更新(最新有效方法)
  • 5060显卡驱动PyCUDA开发环境搭建