集合和数据结构

迭代

序列迭代由 iterate 实现 广义的 for 循环

  1. for i in iter # or "for i = iter"
  2. # body
  3. end

被转换成

  1. next = iterate(iter)
  2. while next !== nothing
  3. (i, state) = next
  4. # body
  5. next = iterate(iter, state)
  6. end

state 对象可以是任何对象,并且对于每个可迭代类型应该选择合适的 state 对象。 请参照 帮助文档接口的迭代小节 来获取关于定义一个常见迭代类型的更多细节。

  1. Base.iterate
  2. Base.IteratorSize
  3. Base.IteratorEltype

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

构造函数和类型

  1. Base.AbstractRange
  2. Base.OrdinalRange
  3. Base.AbstractUnitRange
  4. Base.StepRange
  5. Base.UnitRange
  6. Base.LinRange

通用集合

  1. Base.isempty
  2. Base.empty!
  3. Base.length
  4. Base.checked_length

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

可迭代集合

  1. Base.in
  2. Base.:∉
  3. Base.eltype
  4. Base.indexin
  5. Base.unique
  6. Base.unique!
  7. Base.allunique
  8. Base.reduce(::Any, ::Any)
  9. Base.foldl(::Any, ::Any)
  10. Base.foldr(::Any, ::Any)
  11. Base.maximum
  12. Base.maximum!
  13. Base.minimum
  14. Base.minimum!
  15. Base.extrema
  16. Base.argmax
  17. Base.argmin
  18. Base.findmax
  19. Base.findmin
  20. Base.findmax!
  21. Base.findmin!
  22. Base.sum
  23. Base.sum!
  24. Base.prod
  25. Base.prod!
  26. Base.any(::Any)
  27. Base.any(::AbstractArray, ::Any)
  28. Base.any!
  29. Base.all(::Any)
  30. Base.all(::AbstractArray, ::Any)
  31. Base.all!
  32. Base.count
  33. Base.any(::Any, ::Any)
  34. Base.all(::Any, ::Any)
  35. Base.foreach
  36. Base.map
  37. Base.map!
  38. Base.mapreduce(::Any, ::Any, ::Any)
  39. Base.mapfoldl(::Any, ::Any, ::Any)
  40. Base.mapfoldr(::Any, ::Any, ::Any)
  41. Base.first
  42. Base.last
  43. Base.front
  44. Base.tail
  45. Base.step
  46. Base.collect(::Any)
  47. Base.collect(::Type, ::Any)
  48. Base.filter
  49. Base.filter!
  50. Base.replace(::Any, ::Pair...)
  51. Base.replace(::Base.Callable, ::Any)
  52. Base.replace!
  53. Base.rest

可索引集合

  1. Base.getindex
  2. Base.setindex!
  3. Base.firstindex
  4. 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) 的值。

  1. Base.AbstractDict
  2. Base.Dict
  3. Base.IdDict
  4. Base.WeakKeyDict
  5. Base.ImmutableDict
  6. Base.haskey
  7. Base.get
  8. Base.get!
  9. Base.getkey
  10. Base.delete!
  11. Base.pop!(::Any, ::Any, ::Any)
  12. Base.keys
  13. Base.values
  14. Base.pairs
  15. Base.merge
  16. Base.mergewith
  17. Base.merge!
  18. Base.mergewith!
  19. Base.sizehint!
  20. Base.keytype
  21. Base.valtype

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

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

类似 Set 的集合

  1. Base.AbstractSet
  2. Base.Set
  3. Base.BitSet
  4. Base.union
  5. Base.union!
  6. Base.intersect
  7. Base.setdiff
  8. Base.setdiff!
  9. Base.symdiff
  10. Base.symdiff!
  11. Base.intersect!
  12. Base.issubset
  13. Base.:⊈
  14. Base.:⊊
  15. Base.issetequal
  16. Base.isdisjoint

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

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

双端队列

  1. Base.push!
  2. Base.pop!
  3. Base.popat!
  4. Base.pushfirst!
  5. Base.popfirst!
  6. Base.insert!
  7. Base.deleteat!
  8. Base.keepat!
  9. Base.splice!
  10. Base.resize!
  11. Base.append!
  12. Base.prepend!

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

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

集合相关的实用工具

  1. Base.Pair
  2. Iterators.Pairs