集合和数据结构
迭代
序列迭代由 iterate 实现
广义的 for 循环
for i in iter # or "for i = iter"# bodyend
被转换成
next = iterate(iter)while next !== nothing(i, state) = next# bodynext = iterate(iter, state)end
state 对象可以是任何对象,并且对于每个可迭代类型应该选择合适的 state 对象。
请参照 帮助文档接口的迭代小节 来获取关于定义一个常见迭代类型的更多细节。
Base.iterateBase.IteratorSizeBase.IteratorEltype
以下类型均完全实现了上述函数:
AbstractRangeUnitRangeTupleNumberAbstractArrayBitSetIdDictDictWeakKeyDictEachLineAbstractStringSetPairNamedTuple
构造函数和类型
Base.AbstractRangeBase.OrdinalRangeBase.AbstractUnitRangeBase.StepRangeBase.UnitRangeBase.LinRange
通用集合
Base.isemptyBase.empty!Base.lengthBase.checked_length
以下类型均完全实现了上述函数:
AbstractRangeUnitRangeTupleNumberAbstractArrayBitSetIdDictDictWeakKeyDictAbstractStringSetNamedTuple
可迭代集合
Base.inBase.:∉Base.eltypeBase.indexinBase.uniqueBase.unique!Base.alluniqueBase.reduce(::Any, ::Any)Base.foldl(::Any, ::Any)Base.foldr(::Any, ::Any)Base.maximumBase.maximum!Base.minimumBase.minimum!Base.extremaBase.argmaxBase.argminBase.findmaxBase.findminBase.findmax!Base.findmin!Base.sumBase.sum!Base.prodBase.prod!Base.any(::Any)Base.any(::AbstractArray, ::Any)Base.any!Base.all(::Any)Base.all(::AbstractArray, ::Any)Base.all!Base.countBase.any(::Any, ::Any)Base.all(::Any, ::Any)Base.foreachBase.mapBase.map!Base.mapreduce(::Any, ::Any, ::Any)Base.mapfoldl(::Any, ::Any, ::Any)Base.mapfoldr(::Any, ::Any, ::Any)Base.firstBase.lastBase.frontBase.tailBase.stepBase.collect(::Any)Base.collect(::Type, ::Any)Base.filterBase.filter!Base.replace(::Any, ::Pair...)Base.replace(::Base.Callable, ::Any)Base.replace!Base.rest
可索引集合
Base.getindexBase.setindex!Base.firstindexBase.lastindex
以下类型均完全实现了上述函数:
ArrayBitArrayAbstractArraySubArray
以下类型仅实现了部分上述函数:
AbstractRangeUnitRangeTupleAbstractStringDictIdDictWeakKeyDictNamedTuple
字典
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 => y 到 D 中,会覆盖键 x 的已有的值。
多个参数传入D[...] 会被转化成元组;
例如:语法 D[x,y] 等于 D[(x,y)],也就是说,它指向键为元组 (x,y) 的值。
Base.AbstractDictBase.DictBase.IdDictBase.WeakKeyDictBase.ImmutableDictBase.haskeyBase.getBase.get!Base.getkeyBase.delete!Base.pop!(::Any, ::Any, ::Any)Base.keysBase.valuesBase.pairsBase.mergeBase.mergewithBase.merge!Base.mergewith!Base.sizehint!Base.keytypeBase.valtype
以下类型均完全实现了上述函数:
以下类型仅实现了部分上述函数:
类似 Set 的集合
Base.AbstractSetBase.SetBase.BitSetBase.unionBase.union!Base.intersectBase.setdiffBase.setdiff!Base.symdiffBase.symdiff!Base.intersect!Base.issubsetBase.:⊈Base.:⊊Base.issetequalBase.isdisjoint
以下类型均完全实现了上述函数:
以下类型仅实现了部分上述函数:
双端队列
Base.push!Base.pop!Base.popat!Base.pushfirst!Base.popfirst!Base.insert!Base.deleteat!Base.keepat!Base.splice!Base.resize!Base.append!Base.prepend!
以下类型均完全实现了上述函数:
集合相关的实用工具
Base.PairIterators.Pairs
