Julia 字典和集合
数组是一种集合,此外 Julia 也有其他类型的集合,比如字典和 set(无序集合列表)。
字典
字典是一种可变容器模型,且可存储任意类型对象。
字典的每个键值 key=>value 对用 => 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:
创建字典
创建字典的语法格式如下:
Dict("key1" => value1, "key2" => value2,,…, "keyn" => valuen)
以下实例创建一个简单的字典,键 A 对应的值为 1,键 B 对应的值为 2:
Dict("A"=>1, "B"=>2)
实例
julia> D=Dict("A"=>1, "B"=>2)
Dict{String, Int64} with 2 entries:
"B" => 2
"A" => 1
julia>
使用 for 来创建一个字典:
实例
julia> first_dict = Dict(string(x) => sind(x) for x = 0:5:360)
Dict{String, Float64} with 73 entries:
"285" => -0.965926
"310" => -0.766044
"245" => -0.906308
"320" => -0.642788
"350" => -0.173648
"20" => 0.34202
"65" => 0.906308
"325" => -0.573576
"155" => 0.422618
"80" => 0.984808
"335" => -0.422618
"125" => 0.819152
"360" => 0.0
"75" => 0.965926
"110" => 0.939693
"185" => -0.0871557
"70" => 0.939693
"50" => 0.766044
"190" => -0.173648
⋮ => ⋮
键(Key)
字典中的键是唯一的, 如果我们为一个已经存在的键分配一个值,我们不会创建一个新的,而是修改现有的键。
查找 key
我们可以使用 haskey() 函数来检查字典是否包含指定的 key:
实例
julia> D=Dict("A"=>1, "B"=>2)
Dict{String, Int64} with 2 entries:
"B" => 2
"A" => 1
julia> haskey(first_dict, "A")
false
julia> haskey(D, "A")
true
julia> haskey(D, "Z")
false
也可以使用 in() 函数来检查字典是否包含键/值对:
实例
julia> D=Dict("A"=>1, "B"=>2)
Dict{String, Int64} with 2 entries:
"B" => 2
"A" => 1
julia> in(("A" => 1), D)
true
julia> in(("X" => 220), first_dict)
false
添加 key/value 对
我们可以在已存在的字典中添加一个新的 key/value 对,如下所示:
实例
julia> D=Dict("A"=>1, "B"=>2)
Dict{String, Int64} with 2 entries:
"B" => 2
"A" => 1
julia> D["C"] = 3
3
julia> D
Dict{String, Int64} with 3 entries:
"B" => 2
"A" => 1
"C" => 3
删除 key/value 对
我们可以使用 delete!() 函数删除已存在字典的 key:
实例
julia> delete!(D, "C")
Dict{String, Int64} with 2 entries:
"B" => 2
"A" => 1
获取字典中所有的 key
我们可以使用 keys() 函数获取字典中所有的 key:
实例
julia> keys(D)
KeySet for a Dict{String, Int64} with 2 entries. Keys:
"B"
"A"
julia>
值(Value)
字典中的每个键都有一个对应的值。
查看字典所有值
我们可以使用 values() 查看字典所有值:
实例
julia> D=Dict("A"=>1, "B"=>2)
Dict{String, Int64} with 2 entries:
"B" => 2
"A" => 1
julia> values(D)
ValueIterator for a Dict{String, Int64} with 2 entries. Values:
2
1
julia>
字典作为可迭代对象
我们可以将字典作为可迭代对象来查看键/值对:
实例
julia> D=Dict("A"=>1, "B"=>2)
Dict{String, Int64} with 2 entries:
"B" => 2
"A" => 1
julia> for kv in D
println(kv)
end
"B" => 2
"A" => 1
实例中 kv 是一个包含每个键/值对的元组。
字典排序
字典是无序的,但我们可以使用 sort() 函数来对字典进行排序:
实例
julia> runoob_dict = Dict("R" => 100, "S" => 220, "T" => 350, "U" => 400, "V" => 575, "W" => 670)
Dict{String, Int64} with 6 entries:
"S" => 220
"U" => 400
"T" => 350
"W" => 670
"V" => 575
"R" => 100
julia> for key in sort(collect(keys(runoob_dict)))
println("$key => $(runoob_dict[key])")
end
R => 100
S => 220
T => 350
U => 400
V => 575
W => 670
我们可以使用 DataStructures.ji 包中的 SortedDict 数据类型让字典始终保持排序状态。
使用 DataStructures 包需要先安装它,可以在 REPL 的 Pkg 模式中,使用 add 命令添加 SortedDict。
在 REPL 中输入符号 ] ,进入 pkg 模式。
进入 pkg 模式
julia> ] # 输入 ] 就进入 pkg 模式
添加包预防语法格式:
add 包名
以下我们添加 DataStructures 包后,后面的实例就可以正常运行了:
(@v1.7) pkg> add DataStructures
未注册的包,可以直接指定 url:
add https://github.com/fredrikekre/ImportMacros.jl
本地包:
add 本地路径/包名.jl
实例
julia> import DataStructures
julia> runoob_dict = DataStructures.SortedDict("S" => 220, "T" => 350, "U" => 400, "V" => 575, "W" => 670)
DataStructures.SortedDict{String, Int64, Base.Order.ForwardOrdering} with 5 entries:
"S" => 220
"T" => 350
"U" => 400
"V" => 575
"W" => 670
julia> runoob_dict["R"] = 100
100
julia> runoob_dict
DataStructures.SortedDict{String, Int64, Base.Order.ForwardOrdering} with 6 entries:
"R" => 100
"S" => 220
"T" => 350
"U" => 400
"V" => 575
"W" => 670
Set(集合)
Julia Set(集合)是没有重复的对象数据集,所有的元素都是唯一的。
以下是 set 和其他类型的集合之间的区别:
- set 中的元素是唯一的
- set 中元素的顺序不重要
set 用于创建不重复列表。
创建 Set 集合
借助 Set 构造函数,我们可以创建如下集合:
实例
julia> var_site = Set()
Set{Any}()
julia> num_primes = Set{Int64}()
Set{Int64}()
julia> var_site = Set{String}(["Google","Runoob","Taobao"])
Set{String} with 3 elements:
"Google"
"Taobao"
"Runoob"
Alternatively we can also use push!() function, as arrays, to add elements in sets as follows −
我们可以使用 push!() 函数添加集合元素,如下所示:
实例
julia> push!(var_site, "Wiki")
Set{String} with 4 elements:
"Google"
"Wiki"
"Taobao"
"Runoob"
我们可以使用 in() 函数查看元素是否存在于集合中:
实例
julia> in("Runoob", var_site)
true
julia> in("Zhihu", var_site)
false
常用操作
并集、交集和差集是我们可以对集合常用的一些操作, 这些操作对应的函数是 union()、intersect() 和 setdiff()。

并集
两个集合 A,B,把他们所有的元素合并在一起组成的集合,叫做集合 A 与集合 B 的并集。
实例
julia> A = Set{String}(["red","green","blue", "black"])
Set{String} with 4 elements:
"blue"
"green"
"black"
"red"
julia> B = Set(["red","orange","yellow","green","blue","indigo","violet"])
Set{String} with 7 elements:
"indigo"
"yellow"
"orange"
"blue"
"violet"
"green"
"red"
julia> union(A, B)
Set{String} with 8 elements:
"indigo"
"green"
"black"
"yellow"
"orange"
"blue"
"violet"
"red"
交集
集合 A 和 B 的交集是含有所有既属 A 又属于 B 的元素,而没有其他元素的集合。
实例
julia> intersect(A, B)
Set{String} with 3 elements:
"blue"
"green"
"red"
差集
集合 A 和 B 的差集是含有所有属 A 但不属于 B 的元素,即去除 B 与 A 重叠的元素。
实例
julia> setdiff(A, B)
Set{String} with 1 element:
"black"
字典与集合常用函数实例
在下面的实例中,演示了字典中常用的函数,在集合中也同样适用:
创建两个字典 dict1 和 dict2:
实例
julia> dict1 = Dict(100=>"X", 220 => "Y")
Dict{Int64,String} with 2 entries:
100 => "X"
220 => "Y"
julia> dict2 = Dict(220 => "Y", 300 => "Z", 450 => "W")
Dict{Int64,String} with 3 entries:
450 => "W"
220 => "Y"
300 => "Z"
字典并集:
实例
julia> union(dict1, dict2)
4-element Array{Pair{Int64,String},1}:
100 => "X"
220 => "Y"
450 => "W"
300 => "Z"
Intersect
julia> intersect(dict1, dict2)
1-element Array{Pair{Int64,String},1}:
220 => "Y"
字典差集:
实例
julia> setdiff(dict1, dict2)
1-element Array{Pair{Int64,String},1}:
100 => "X"
合并字典:
实例
julia> merge(dict1, dict2)
Dict{Int64,String} with 4 entries:
100 => "X"
450 => "W"
220 => "Y"
300 => "Z"
查看字典中的最小值:
实例
julia> dict1
Dict{Int64,String} with 2 entries:
100 => "X"
220 => "Y"
julia> findmin(dict1)
("X", 100)
相关文章:
Julia 字典和集合
数组是一种集合,此外 Julia 也有其他类型的集合,比如字典和 set(无序集合列表)。 字典 字典是一种可变容器模型,且可存储任意类型对象。 字典的每个键值 key>value 对用 > 分割,每个键值对之间用逗…...
devops-发布vue前端项目
回到目录 将使用jenkinsk8s发布前端项目 1 环境准备 node环境 在部署jenkins的服务器上搭建node环境 node版本 # 1.拉取 https://nodejs.org/download/release/v20.4.0/node-v20.4.0-linux-x64.tar.gz# 2.解压到/usr/local目录下 sudo tar xf v20.4.0.tar.gz -C /usr/loc…...
使用正则表达式设置强密码
文章目录 例子和解析测试工具Java中的应用 例子和解析 强密码需要同时含有大写字母、小写字母、数字、特殊符号。 这边先展示我自己写的。 ^(?.*[a-z])(?.*[A-Z])(?.*[0-9])(?.*[!#$%?])[a-zA-Z0-9!#$%?_]{8,}$以上代8位以上的强密码。 下面是具体解析: ^代…...
epoll、poll、select的原理和区别
select,poll,epoll都是IO多路复用的机制。I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select&a…...
【学习笔记】Java安全之反序列化
文章目录 反序列化方法的对比PHP的反序列化Java的反序列化Python反序列化 URLDNS链利用链分析触发DNS请求 CommonCollections1利用链利用TransformedMap构造POC利用LazyMap构造POCCommonsCollections6 利用链 最近在学习Phith0n师傅的知识星球的Java安全漫谈系列,随…...
算法练习--leetcode 数组
文章目录 爬楼梯问题裴波那契数列两数之和 [数组]合并两个有序数组移动零找到所有数组中消失的数字三数之和 爬楼梯问题 输入n阶楼梯,每次爬1或者2个台阶,有多少种方法可以爬到楼顶? 示例1:输入2, 输出2 一次爬2阶&a…...
本地 shell无法连接centos 7 ?
1、首先检查是否安装ssh服务; yum list installed | grep openssh-server# 没有安装尝试安装下 yum install openssh-server 2、检查ssh服务是否开启 systemctl status sshd.service# 未开启,开启下 systemctl start sshd.service # 将sshd 服务添…...
C 语言的基本算术运算符 = + - * /
C 语言的基本算术运算符有: - * / 赋值运算符 赋值运算符左侧必须引用一个内存中的位置, 最简单的方法就是使用变量名, 也可以使用指针指向内存中的某个位置. 赋值表达式的目的是把值储存到目标内存位置上. 下面语句中的 表示初始化而不是赋值: const int …...
SQL注入实操三(SQLilabs Less41-50)
文章目录 一、sqli-labs靶场1.轮子模式总结2.Less-41 stacked Query Intiger type blinda.注入点判断b.轮子测试c.获取数据库名称d.堆叠注入e.堆叠注入外带注入获取表名f.堆叠注入外带注入获取列名g.堆叠注入外带注入获取表内数据 3.Less-42 Stacked Query error baseda.注入点…...
HOT77-买卖股票的最佳时机
leetcode原题链接:买卖股票的最佳时机 题目描述 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所…...
CSS调色网有哪些
本文章转载于湖南五车教育,仅用于学习和讨论,如有侵权请联系 1、https://webgradients.com/ Wbgradients 是一个在线调整渐变色的网站 ,可以根据你想要的调整效果,同时支持复制 CSS 代码,可以更好的与开发对接。 Wbg…...
Day10-NodeJS和NPM配置
Day10-NodeJS和NPM 一 Nodejs 1 简介 Nodejs学习中文网:https://www.nodeapp.cn/synopsis.html Nodejs的官网:https://nodejs.org/ 概念:Nodejs是JavaScript的服务端运行环境.Nodejs不是框架,也不是编程语言,就是一个运行环境. Nodejs是基于chrome V8引擎开发的一套js代码…...
线性代数 | 机器学习数学基础
前言 线性代数(linear algebra)是关于向量空间和线性映射的一个数学分支。它包括对线、面和子空间的研究,同时也涉及到所有的向量空间的一般性质。 本文主要介绍机器学习中所用到的线性代数核心基础概念,供读者学习阶段查漏补缺…...
Nios初体验之——Hello world!
文章目录 前言一、系统设计1、系统模块框图2、系统涉及到的模块1、时钟2、nios2_qsys3、片内存储(onchip_rom、onchip_ram)4、串行通信(jtag_uart)5、System ID(sysid_qsys) 二、硬件设计1、创建Qsys2、重命…...
[Linux]理解文件系统!动静态库详细制作使用!(缓冲区、inode、软硬链接、动静态库)
hello,大家好,这里是bang___bang_,今天来谈谈的文件系统知识,包含有缓冲区、inode、软硬链接、动静态库。本篇旨在分享记录知识,如有需要,希望能有所帮助。 目录 1️⃣缓冲区 🍙缓冲区的意义 …...
【Linux操作系统】Vim:提升你的编辑效率
Vim是一款功能强大的文本编辑器,它具有高度可定制性和灵活性,可以帮助程序员和文本编辑者提高编辑效率。本文将介绍Vim的基本使用方法、常用功能和一些实用技巧。 文章目录 1. Vim的基本使用方法:2. 常用功能:2.1 文件操作&#…...
Mybatis-plus 的自动填充策略
当在项目中需要对某些实体类中的公共的属性进行自动填充时,可以使用Mybatis-plus中的自动填充功能。 (1)我们可以在实体类中把要自动填充的类属性加上指定的注解TableField(填写在上面方法时进行填充的枚举类型填充策略ÿ…...
大数据课程G2——Hbase的基本架构
文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Hbase的基本架构; ⚪ 掌握Hbase的读写流程; ⚪ 掌握Hbase的设计与优化; 一、基本架构 1. HRegion 1. 在HBase中,会将一个表从行键方向上进行切分,切分成1个或者多个HRegion。 …...
微信小程序wx.getlocation接口权限申请总结
先附上申请通过截图 插播内容:可代开通,保证通过。wx.getLocation接口(获取当前的地址位置) qq: 308205428 如何申请 当申请微信小程序的wx.getLocation接口权限时,你可以…...
简单游戏截图_可控截取内容1
一个需求 我需要在场景中截取不同层级的截图(如只截模型或只截UI或只截外部相加看到的画面 或全都截或和Shader配合呈现人眼夜视仪热成像的画面切换) 将截图排到列表中,在场景UI中展示出来 如何做 相机要能够看到不同的画面 将当前帧画面存储下来 将存储的画面展示出…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
