- 关于本文档
- 前言
- 入门
- 变量
- 整数和浮点数
- 数学运算和初等函数
- 复数和分数
- 字符串
- 函数
- 流程控制
- 变量作用域
- 类型
- 方法
- 构造函数
- 类型转换和类型提升
- 接口
- 模块
- 文档
- 元编程
- 多维数组
- 缺失值
- 网络和流
- 并行计算
- 运行外部程序
- 调用 C 和 Fortran 代码
- 处理操作系统差异
- 环境变量
- 嵌入Julia
- 代码加载
- 性能分析
- 栈跟踪
- 性能建议
- 工作流程建议
- 代码风格指南
- 常见问题
- 与其他语言的显著差异
- Unicode 输入表
- 基本功能
- 集合和数据结构
- 数学相关
- Numbers
- 字符串
- Arrays
- Tasks
- 多线程
- 常量
- 文件系统
- I/O 与网络
- 标点符号
- 排序及相关函数
- 迭代相关
- C 接口
- C 标准库
- StackTraces
- SIMD 支持
集合和数据结构
[迭代]
序列迭代由 iterate
实现
广义的 for
循环
for i in iter # or "for i = iter"
# body
end
被转换成
next = iterate(iter)
while next !== nothing
(i, state) = next
# body
next = iterate(iter, state)
end
state
对象可以是任何对象,并且对于每个可迭代类型应该选择合适的 state
对象。
请参照 [帮助文档接口的迭代小节](http://127.0.0.5/@ref man-interface-iteration) 来获取关于定义一个常见迭代类型的更多细节。
Base.iterate
Base.IteratorSize
Base.IteratorEltype
以下类型均完全实现了上述函数:
AbstractRange
UnitRange
Tuple
Number
AbstractArray
BitSet
IdDict
Dict
WeakKeyDict
EachLine
AbstractString
Set
Pair
NamedTuple
构造函数和类型
Base.AbstractRange
Base.OrdinalRange
Base.AbstractUnitRange
Base.StepRange
Base.UnitRange
Base.LinRange
通用集合
Base.isempty
Base.empty!
Base.length
以下类型均完全实现了上述函数:
AbstractRange
UnitRange
Tuple
Number
AbstractArray
BitSet
IdDict
Dict
WeakKeyDict
AbstractString
Set
NamedTuple
可迭代集合
Base.in
Base.:∉
Base.eltype
Base.indexin
Base.unique
Base.unique!
Base.allunique
Base.reduce(::Any, ::Any)
Base.foldl(::Any, ::Any)
Base.foldr(::Any, ::Any)
Base.maximum
Base.maximum!
Base.minimum
Base.minimum!
Base.extrema
Base.argmax
Base.argmin
Base.findmax
Base.findmin
Base.findmax!
Base.findmin!
Base.sum
Base.sum!
Base.prod
Base.prod!
Base.any(::Any)
Base.any(::AbstractArray, ::Any)
Base.any!
Base.all(::Any)
Base.all(::AbstractArray, ::Any)
Base.all!
Base.count
Base.any(::Any, ::Any)
Base.all(::Any, ::Any)
Base.foreach
Base.map
Base.map!
Base.mapreduce(::Any, ::Any, ::Any)
Base.mapfoldl(::Any, ::Any, ::Any)
Base.mapfoldr(::Any, ::Any, ::Any)
Base.first
Base.last
Base.step
Base.collect(::Any)
Base.collect(::Type, ::Any)
Base.filter
Base.filter!
Base.replace(::Any, ::Pair...)
Base.replace(::Base.Callable, ::Any)
Base.replace!
可索引集合
Base.getindex
Base.setindex!
Base.firstindex
Base.lastindex
以下类型均完全实现了上述函数:
Array
BitArray
AbstractArray
SubArray
以下类型仅实现了部分上述函数:
AbstractRange
UnitRange
Tuple
AbstractString
Dict
IdDict
WeakKeyDict
NamedTuple
字典
Dict
是一个标准字典。其实现利用了 hash
作为键的哈希函数和 isequal
来决定是否相等。对于自定义类型,可以定义这两个函数来重载它们在哈希表内的存储方式。
IdDict
是一种特殊的哈希表,在里面键始终是对象标识符。
WeakKeyDict
是一个哈希表的实现,里面键是对象的弱引用,
所以即使键在哈希表中被引用也有可能被垃圾回收。
它像 Dict
一样使用 hash
来做哈希和 isequal
来做相等判断,
但是它不会在插入时转换键,这点不像 Dict
。
Dict
s 可以由传递含有 =>
的成对对象给 Dict
的构造函数来被创建:Dict("A"=>1, "B"=>2)
。
这个调用会尝试从键值对中推到类型信息(比如这个例子创造了一个 Dict{String, Int64}
)。
为了显式指定类型,请使用语法 Dict{KeyType,ValueType}(...)
。例如:Dict{String,Int32}("A"=>1, "B"=>2)
。
字典也可以用生成器创建。例如:Dict(i => f(i) for i = 1:10)
。
对于字典 D
,若键 x
的值存在,则语法 D[x]
返回 x
的值;否则抛出一个错误。
D[x] = y
存储键值对 x => y
到 D
中,会覆盖键 x
的已有的值。
多个参数传入D[...]
会被转化成元组;
例如:语法 D[x,y]
等于 D[(x,y)]
,也就是说,它指向键为元组 (x,y)
的值。
Base.Dict
Base.IdDict
Base.WeakKeyDict
Base.ImmutableDict
Base.haskey
Base.get(::Any, ::Any, ::Any)
Base.get
Base.get!(::Any, ::Any, ::Any)
Base.get!(::Function, ::Any, ::Any)
Base.getkey
Base.delete!
Base.pop!(::Any, ::Any, ::Any)
Base.keys
Base.values
Base.pairs
Base.merge
Base.merge!(::AbstractDict, ::AbstractDict...)
Base.merge!(::Function, ::AbstractDict, ::AbstractDict...)
Base.sizehint!
Base.keytype
Base.valtype
以下类型均完全实现了上述函数:
以下类型仅实现了部分上述函数:
BitSet
Set
- [
EnvDict
](http://127.0.0.5/@ref Base.EnvDict) Array
BitArray
- [
ImmutableDict
](http://127.0.0.5/@ref Base.ImmutableDict) Iterators.Pairs
类似 Set 的集合
Base.Set
Base.BitSet
Base.union
Base.union!
Base.intersect
Base.setdiff
Base.setdiff!
Base.symdiff
Base.symdiff!
Base.intersect!
Base.issubset
Base.:⊈
Base.:⊊
Base.issetequal
以下类型均完全实现了上述函数:
以下类型仅实现了部分上述函数:
双端队列
Base.push!
Base.pop!
Base.pushfirst!
Base.popfirst!
Base.insert!
Base.deleteat!
Base.splice!
Base.resize!
Base.append!
Base.prepend!
以下类型均完全实现了上述函数:
集合相关的实用工具
Base.Pair
Iterators.Pairs
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论