返回介绍

集合和数据结构

发布于 2019-07-03 15:53:55 字数 7868 浏览 1188 评论 0 收藏 0

[迭代]

序列迭代由 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

以下类型均完全实现了上述函数:

构造函数和类型

Base.AbstractRange
Base.OrdinalRange
Base.AbstractUnitRange
Base.StepRange
Base.UnitRange
Base.LinRange

通用集合

Base.isempty
Base.empty!
Base.length

以下类型均完全实现了上述函数:

可迭代集合

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

以下类型均完全实现了上述函数:

以下类型仅实现了部分上述函数:

字典

Dict 是一个标准字典。其实现利用了 hash 作为键的哈希函数和 isequal 来决定是否相等。对于自定义类型,可以定义这两个函数来重载它们在哈希表内的存储方式。

IdDict 是一种特殊的哈希表,在里面键始终是对象标识符。

WeakKeyDict 是一个哈希表的实现,里面键是对象的弱引用, 所以即使键在哈希表中被引用也有可能被垃圾回收。 它像 Dict 一样使用 hash 来做哈希和 isequal 来做相等判断, 但是它不会在插入时转换键,这点不像 Dict

Dicts 可以由传递含有 => 的成对对象给 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 => yD 中,会覆盖键 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

以下类型均完全实现了上述函数:

以下类型仅实现了部分上述函数:

类似 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!

以下类型均完全实现了上述函数:

  • Vector (a.k.a. 1-dimensional Array)
  • BitVector (a.k.a. 1-dimensional BitArray)

集合相关的实用工具

Base.Pair
Iterators.Pairs

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文