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

Julia元组、字典、集合

文章目录

    • 元组
    • 字典
    • 集合
    • 共性

Julia系列:编程初步🔥数组

作为通用编程语言,除了数组之外,julia实现了元组、字典、集合等数据结构。

元组

与向量类似,也是一维的数据结构,并且对数据类型无要求,从创建流程来说,向量用方括号创建,元组用圆括号创建,并且支持索引,下标从1开始

x = (1, "a")    # (1, "a")
x[1]            # 1
x[2]            # "a"
x[1]=1  # 报错

除了普通的元组之外,Julia还支持带有键的元组,

y = (; name="micro", age=7) # (name = "micro", age = 7)

带键元组支持两种索引方式,一种是符号索引,一种是点索引,前者更像是字典,后者更像是类

y[:name]    # "micro"
y.age       # 7

无论是普通元组,还是带有名字的元组,其内部元素都是固定的,不支持修改,这是元组与向量以及字典的区别。

字典

字典就是键值对结构,通过键来索引值,并且内部元素可动态修改

d = Dict("name"=>"micro", "age"=>7)
d["name"]       # "micro"
d["age"] = 8    #8
println(d)
# Dict{String, Any}("name" => "micro", "age" => 8)

初学者容易忘记调用Dict,而写为如下形式

ps = ("name"=>"micro", "age"=>7)

这个ps其实是一个元组,而其中的元素xx=>yy则是一个Pair。

ps[1]           # "name" => "micro"
typeof(ps[1])   # Pair{String, String}

Pair支持方括号索引,也可以通过first和last来获取元素

ps[1][1]    # "name"
last(ps[1]) # "micro"

集合

Julia中的集合,和数学上的集合有个相似的性质,即没有重复元素,可通过函数Set生成

Set(x)  # Set{Any} with 2 elements: "a" 1
Set(y)  # Set{Any} with 2 elements: 7 "micro"
Set([1,2,3,3])
#= Set{Int64} with 3 elements:231
=#

Julia中为集合提供了计算函数以及运算符

功能函数形式运算符形式
并集union(A, B)A ∪ B
交集intersect(A, B)A ∩ B
差集setdiff(A, B)A \ B
对称差集symdiff(A, B)(A∖B)∪(B∖A)
判断相等issetequal(A, B)
判断子集issubset(A, B)A ⊆ B

在Julia命令行中,这些特殊符号可通过\xxx然后按下tab键打出,语法与markdown相同

\cup\cap
\subseteq\nsubseteq
\supseteq\nsupseteq
\in\ni
\notin\nni

下面做一个简单的测试

A = Set([1,2,3,4,5])
B = Set([2,3,4])
A ∪ B   # 5 4 3 2 1 
A ∩ B    # 4 2 3
3 in A   # true
3 ∈ A   # true

共性

这些数据结构有一个共性,它们可以快速匹配等号左边的变量,并进行赋值

a,b = x # a=1, b="a"
a,b = d # a = "name" => "micro"; b = "age"  => 8

但集合本质上是无序的,所以并不建议用这种方法赋值,比如下面的案例中,A在创建时的顺序明明是1, 2, 3, 4, 5,但对a,b 赋值的结果却是5和4。

a,b = A # a = 5, b = 4
http://www.lryc.cn/news/210188.html

相关文章:

  • EfficientViT:高分辨率密集预测的多尺度线性关注
  • 每日一道算法题:26. 删除有序数组中的重复项
  • 吴恩达《机器学习》2-2->2-4:代价函数
  • 软考 系统架构设计师系列知识点之设计模式(6)
  • use renv with this project create a git repository
  • 摄像头种类繁多,需要各自APP
  • Openssl数据安全传输平台010:jasoncpp 0.10.7的编译 - Windows-vs2022 / Ubuntu/ Centos8 -含测试代码
  • GSCoolink GSV6182 带嵌入式MCU的MIPI D-PHY转HDMI 2.0
  • ABBYY FineReader PDF15免费版图片文件识别软件
  • 如何使用手机蓝牙设备作为电脑的解锁工具像动态锁那样,蓝牙接近了电脑,电脑自动解锁无需输入开机密码
  • 几道面试题记录20231023
  • c++ 线程安全的string类
  • linux上安装apktool反编译apk解析AndroidManifest.xml得到首页Activity
  • 代码随想录算法训练营第4天| 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交 、142.环形链表II
  • 【面向对象程序设计】Java大作业 汽车租赁管理系统V4.0
  • golang模拟QQ退出后自动重启
  • jQuery中ajax如何使用
  • redis集群的多key原子性操作如何实现?
  • 密码学与网络安全:量子计算的威胁与解决方案
  • GoLong的学习之路(十二)语法之标准库 flag的使用
  • mac git ssh
  • 栈、共享栈、链式栈(C++实现)
  • MySQL实战2
  • 【面试经典150 | 栈】简化路径
  • 无线电编码和记录和静音检测器 PlayOutONE LiveStream 5.0
  • React中useEffect Hook使用纠错
  • 0049【Edabit ★☆☆☆☆☆】【修改Bug代码】Buggy Code
  • javaswing/gui的科学计算器
  • Chapter1:C++概述
  • 实战经验分享FastAPI 是什么