Collections and Data Structures

# Collections and Data Structures

## Iteration

Sequential iteration is implemented by the methods `start`, `done`, and `next`. The general `for` loop:

``````for i = I   # or  "for i in I"
# body
end``````

is translated into:

``````state = start(I)
while !done(I, state)
(i, state) = next(I, state)
# body
end``````

The `state` object may be anything, and should be chosen appropriately for each iterable type. See the manual section on the iteration interface for more details about defining a custom iterable type.

``start(iter) -> state``

Get initial iteration state for an iterable object.

Examples

``````julia> start(1:5)
1

julia> start([1;2;3])
1

julia> start([4;2;3])
1``````
source
``done(iter, state) -> Bool``

Test whether we are done iterating.

Examples

``````julia> done(1:5, 3)
false

julia> done(1:5, 5)
false

julia> done(1:5, 6)
true``````
source
``next(iter, state) -> item, state``

For a given iterable object and iteration state, return the current item and the next iteration state.

Examples

``````julia> next(1:5, 3)
(3, 4)

julia> next(1:5, 5)
(5, 6)``````
source
``IteratorSize(itertype::Type) -> IteratorSize``

Given the type of an iterator, return one of the following values:

• `SizeUnknown()` if the length (number of elements) cannot be determined in advance.

• `HasLength()` if there is a fixed, finite length.

• `HasShape{N}()` if there is a known length plus a notion of multidimensional shape (as for an array). In this case `N` should give the number of dimensions, and the `size` function is valid for the iterator.

• `IsInfinite()` if the iterator yields values forever.

The default value (for iterators that do not define this function) is `HasLength()`. This means that most iterators are assumed to implement `length`.

This trait is generally used to select between algorithms that pre-allocate space for their result, and algorithms that resize their result incrementally.

``````julia> Base.IteratorSize(1:5)
Base.HasShape{1}()

julia> Base.IteratorSize((2,3))
Base.HasLength()``````
source
``IteratorEltype(itertype::Type) -> IteratorEltype``

Given the type of an iterator, return one of the following values:

• `EltypeUnknown()` if the type of elements yielded by the iterator is not known in advance.

• `HasEltype()` if the element type is known, and `eltype` would return a meaningful value.

`HasEltype()` is the default, since iterators are assumed to implement `eltype`.

This trait is generally used to select between algorithms that pre-allocate a specific type of result, and algorithms that pick a result type based on the types of yielded values.

``````julia> Base.IteratorEltype(1:5)
Base.HasEltype()``````
source

Fully implemented by:

## General Collections

``isempty(collection) -> Bool``

Determine whether a collection is empty (has no elements).

Examples

``````julia> isempty([])
true

julia> isempty([1 2 3])
false``````
source
``empty!(collection) -> collection``

Remove all elements from a `collection`.

``````julia> A = Dict("a" => 1, "b" => 2)
Dict{String,Int64} with 2 entries:
"b" => 2
"a" => 1

julia> empty!(A);

julia> A
Dict{String,Int64} with 0 entries``````
source
``length(collection) -> Integer``

Return the number of elements in the collection.

Use `lastindex` to get the last valid index of an indexable collection.

Examples

``````julia> length(1:5)
5

julia> length([1, 2, 3, 4])
4

julia> length([1 2; 3 4])
4``````
source
``````length(s::AbstractString) -> Int
length(s::AbstractString, i::Integer, j::Integer) -> Int``````

The number of characters in string `s` from indices `i` through `j`. This is computed as the number of code unit indices from `i` to `j` which are valid character indices. Without only a single string argument, this computes the number of characters in the entire string. With `i` and `j` arguments it computes the number of indices between `i` and `j` inclusive that are valid indices in the string `s`. In addition to in-bounds values, `i` may take the out-of-bounds value `ncodeunits(s) + 1` and `j` may take the out-of-bounds value `0`.

Examples

``````julia> length("jμΛIα")
5``````
source

Fully implemented by:

## Iterable Collections

`Base.in`Function.
``````in(item, collection) -> Bool
∈(item,collection) -> Bool
∋(collection,item) -> Bool
∉(item,collection) -> Bool
∌(collection,item) -> Bool``````

Determine whether an item is in the given collection, in the sense that it is `==` to one of the values generated by iterating over the collection. Some collections need a slightly different definition; for example, `Set`s check whether the item `isequal` to one of the elements. `Dict`s look for `(key,value)` pairs, and the key is compared using `isequal`. To test for the presence of a key in a dictionary, use `haskey` or `k in keys(dict)`.

``````julia> a = 1:3:20
1:3:19

julia> 4 in a
true

julia> 5 in a
false``````
source
``eltype(type)``

Determine the type of the elements generated by iterating a collection of the given `type`. For dictionary types, this will be a `Pair{KeyType,ValType}`. The definition `eltype(x) = eltype(typeof(x))` is provided for convenience so that instances can be passed instead of types. However the form that accepts a type argument should be defined for new types.

Examples

``````julia> eltype(fill(1f0, (2,2)))
Float32

julia> eltype(fill(0x1, (2,2)))
UInt8``````
source
``indexin(a, b)``

Return an array containing the first index in `b` for each value in `a` that is a member of `b`. The output array contains `nothing` wherever `a` is not a member of `b`.

Examples

``````julia> a = ['a', 'b', 'c', 'b', 'd', 'a']

julia> b = ['a', 'b', 'c']

julia> indexin(a, b)
6-element Array{Union{Nothing, Int64},1}:
1
2
3
2
nothing
1

julia> indexin(b, a)
3-element Array{Union{Nothing, Int64},1}:
1
2
3``````
source
``unique(itr)``

Return an array containing only the unique elements of collection `itr`, as determined by `isequal`, in the order that the first of each set of equivalent elements originally appears. The element type of the input is preserved.

Examples

``````julia> unique([1, 2, 6, 2])
3-element Array{Int64,1}:
1
2
6

julia> unique(Real[1, 1.0, 2])
2-element Array{Real,1}:
1
2``````
source
``unique(f, itr)``

Returns an array containing one value from `itr` for each unique value produced by `f` applied to elements of `itr`.

Examples

``````julia> unique(x -> x^2, [1, -1, 3, -3, 4])
3-element Array{Int64,1}:
1
3
4``````
source
``unique(A::AbstractArray, dim::Int)``

Return unique regions of `A` along dimension `dim`.

Examples

``````julia> A = map(isodd, reshape(Vector(1:8), (2,2,2)))
2×2×2 Array{Bool,3}:
[:, :, 1] =
true   true
false  false

[:, :, 2] =
true   true
false  false

julia> unique(A)
2-element Array{Bool,1}:
true
false

julia> unique(A, 2)
2×1×2 Array{Bool,3}:
[:, :, 1] =
true
false

[:, :, 2] =
true
false

julia> unique(A, 3)
2×2×1 Array{Bool,3}:
[:, :, 1] =
true   true
false  false``````
source
``unique!(A::AbstractVector)``

Remove duplicate items as determined by `isequal`, then return the modified `A`. `unique!` will return the elements of `A` in the order that they occur. If you do not care about the order of the returned data, then calling `(sort!(A); unique!(A))` will be much more efficient as long as the elements of `A` can be sorted.

Examples

``````julia> unique!([1, 1, 1])
1-element Array{Int64,1}:
1

julia> A = [7, 3, 2, 3, 7, 5];

julia> unique!(A)
4-element Array{Int64,1}:
7
3
2
5

julia> B = [7, 6, 42, 6, 7, 42];

julia> sort!(B);  # unique! is able to process sorted data much more efficiently.

julia> unique!(B)
3-element Array{Int64,1}:
6
7
42``````
source
``allunique(itr) -> Bool``

Return `true` if all values from `itr` are distinct when compared with `isequal`.

Examples

``````julia> a = [1; 2; 3]
3-element Array{Int64,1}:
1
2
3

julia> allunique([a, a])
false``````
source
``reduce(op, v0, itr)``

Reduce the given collection `itr` with the given binary operator `op`. `v0` must be a neutral element for `op` that will be returned for empty collections. It is unspecified whether `v0` is used for non-empty collections.

Reductions for certain commonly-used operators may have special implementations, and should be used instead: `maximum(itr)`, `minimum(itr)`, `sum(itr)`, `prod(itr)`, `any(itr)`, `all(itr)`.

The associativity of the reduction is implementation dependent. This means that you can't use non-associative operations like `-` because it is undefined whether `reduce(-,[1,2,3])` should be evaluated as `(1-2)-3` or `1-(2-3)`. Use `foldl` or `foldr` instead for guaranteed left or right associativity.

Some operations accumulate error. Parallelism will be easier if the reduction can be executed in groups. Future versions of Julia might change the algorithm. Note that the elements are not reordered if you use an ordered collection.

Examples

``````julia> reduce(*, 1, [2; 3; 4])
24``````
source
``reduce(op, itr)``

Like `reduce(op, v0, itr)`. This cannot be used with empty collections, except for some special cases (e.g. when `op` is one of `+`, `*`, `max`, `min`, `&`, `|`) when Julia can determine the neutral element of `op`.

``````julia> reduce(*, [2; 3; 4])
24``````
source
``foldl(op, v0, itr)``

Like `reduce`, but with guaranteed left associativity. `v0` will be used exactly once.

``````julia> foldl(=>, 0, 1:4)
(((0=>1)=>2)=>3) => 4``````
source
``foldl(op, itr)``

Like `foldl(op, v0, itr)`, but using the first element of `itr` as `v0`. In general, this cannot be used with empty collections (see `reduce(op, itr)`).

``````julia> foldl(=>, 1:4)
((1=>2)=>3) => 4``````
source
``foldr(op, v0, itr)``

Like `reduce`, but with guaranteed right associativity. `v0` will be used exactly once.

``````julia> foldr(=>, 0, 1:4)
1 => (2=>(3=>(4=>0)))``````
source
``foldr(op, itr)``

Like `foldr(op, v0, itr)`, but using the last element of `itr` as `v0`. In general, this cannot be used with empty collections (see `reduce(op, itr)`).

``````julia> foldr(=>, 1:4)
1 => (2=>(3=>4))``````
source
``maximum(itr)``

Returns the largest element in a collection.

``````julia> maximum(-20.5:10)
9.5

julia> maximum([1,2,3])
3``````
source
``maximum(A, dims)``

Compute the maximum value of an array over the given dimensions. See also the `max(a,b)` function to take the maximum of two or more arguments, which can be applied elementwise to arrays via `max.(a,b)`.

``````julia> A = [1 2; 3 4]
2×2 Array{Int64,2}:
1  2
3  4

julia> maximum(A, 1)
1×2 Array{Int64,2}:
3  4

julia> maximum(A, 2)
2×1 Array{Int64,2}:
2
4``````
source
``maximum!(r, A)``

Compute the maximum value of `A` over the singleton dimensions of `r`, and write results to `r`.

Examples

``````julia> A = [1 2; 3 4]
2×2 Array{Int64,2}:
1  2
3  4

julia> maximum!([1; 1], A)
2-element Array{Int64,1}:
2
4

julia> maximum!([1 1], A)
1×2 Array{Int64,2}:
3  4``````
source
``minimum(itr)``

Returns the smallest element in a collection.

``````julia> minimum(-20.5:10)
-20.5

julia> minimum([1,2,3])
1``````
source
``minimum(A, dims)``

Compute the minimum value of an array over the given dimensions. See also the `min(a,b)` function to take the minimum of two or more arguments, which can be applied elementwise to arrays via `min.(a,b)`.

Examples

``````julia> A = [1 2; 3 4]
2×2 Array{Int64,2}:
1  2
3  4

julia> minimum(A, 1)
1×2 Array{Int64,2}:
1  2

julia> minimum(A, 2)
2×1 Array{Int64,2}:
1
3``````
source
``minimum!(r, A)``

Compute the minimum value of `A` over the singleton dimensions of `r`, and write results to `r`.

Examples

``````julia> A = [1 2; 3 4]
2×2 Array{Int64,2}:
1  2
3  4

julia> minimum!([1; 1], A)
2-element Array{Int64,1}:
1
3

julia> minimum!([1 1], A)
1×2 Array{Int64,2}:
1  2``````
source
``extrema(itr) -> Tuple``

Compute both the minimum and maximum element in a single pass, and return them as a 2-tuple.

``````julia> extrema(2:10)
(2, 10)

julia> extrema([9,pi,4.5])
(3.141592653589793, 9.0)``````
source
``extrema(A, dims) -> Array{Tuple}``

Compute the minimum and maximum elements of an array over the given dimensions.

Examples

``````julia> A = reshape(Vector(1:2:16), (2,2,2))
2×2×2 Array{Int64,3}:
[:, :, 1] =
1  5
3  7

[:, :, 2] =
9  13
11  15

julia> extrema(A, (1,2))
1×1×2 Array{Tuple{Int64,Int64},3}:
[:, :, 1] =
(1, 7)

[:, :, 2] =
(9, 15)``````
source
``argmax(itr) -> Integer``

Return the index of the maximum element in a collection. If there are multiple maximal elements, then the first one will be returned.

The collection must not be empty.

Examples

``````julia> argmax([8,0.1,-9,pi])
1

julia> argmax([1,7,7,6])
2

julia> argmax([1,7,7,NaN])
4``````
source
``argmin(itr) -> Integer``

Return the index of the minimum element in a collection. If there are multiple minimal elements, then the first one will be returned.

The collection must not be empty.

Examples

``````julia> argmin([8,0.1,-9,pi])
3

julia> argmin([7,1,1,6])
2

julia> argmin([7,1,1,NaN])
4``````
source
``findmax(itr) -> (x, index)``

Return the maximum element of the collection `itr` and its index. If there are multiple maximal elements, then the first one will be returned. If any data element is `NaN`, this element is returned. The result is in line with `max`.

The collection must not be empty.

Examples

``````julia> findmax([8,0.1,-9,pi])
(8.0, 1)

julia> findmax([1,7,7,6])
(7, 2)

julia> findmax([1,7,7,NaN])
(NaN, 4)``````
source
``findmax(A, region) -> (maxval, index)``

For an array input, returns the value and index of the maximum over the given region. `NaN` is treated as greater than all other values.

Examples

``````julia> A = [1.0 2; 3 4]
2×2 Array{Float64,2}:
1.0  2.0
3.0  4.0

julia> findmax(A,1)
([3.0 4.0], CartesianIndex{2}[CartesianIndex(2, 1) CartesianIndex(2, 2)])

julia> findmax(A,2)
([2.0; 4.0], CartesianIndex{2}[CartesianIndex(1, 2); CartesianIndex(2, 2)])``````
source
``findmin(itr) -> (x, index)``

Return the minimum element of the collection `itr` and its index. If there are multiple minimal elements, then the first one will be returned. If any data element is `NaN`, this element is returned. The result is in line with `min`.

The collection must not be empty.

Examples

``````julia> findmin([8,0.1,-9,pi])
(-9.0, 3)

julia> findmin([7,1,1,6])
(1, 2)

julia> findmin([7,1,1,NaN])
(NaN, 4)``````
source
``findmin(A, region) -> (minval, index)``

For an array input, returns the value and index of the minimum over the given region. `NaN` is treated as less than all other values.

Examples

``````julia> A = [1.0 2; 3 4]
2×2 Array{Float64,2}:
1.0  2.0
3.0  4.0

julia> findmin(A, 1)
([1.0 2.0], CartesianIndex{2}[CartesianIndex(1, 1) CartesianIndex(1, 2)])

julia> findmin(A, 2)
([1.0; 3.0], CartesianIndex{2}[CartesianIndex(1, 1); CartesianIndex(2, 1)])``````
source
``findmax!(rval, rind, A) -> (maxval, index)``

Find the maximum of `A` and the corresponding linear index along singleton dimensions of `rval` and `rind`, and store the results in `rval` and `rind`. `NaN` is treated as greater than all other values.

source
``findmin!(rval, rind, A) -> (minval, index)``

Find the minimum of `A` and the corresponding linear index along singleton dimensions of `rval` and `rind`, and store the results in `rval` and `rind`. `NaN` is treated as less than all other values.

source
``sum(f, itr)``

Sum the results of calling function `f` on each element of `itr`.

The return type is `Int` for signed integers of less than system word size, and `UInt` for unsigned integers of less than system word size. For all other arguments, a common return type is found to which all arguments are promoted.

``````julia> sum(abs2, [2; 3; 4])
29``````

Note the important difference between `sum(A)` and `reduce(+, A)` for arrays with small integer eltype:

``````julia> sum(Int8[100, 28])
128

julia> reduce(+, Int8[100, 28])
-128``````

In the former case, the integers are widened to system word size and therefore the result is 128. In the latter case, no such widening happens and integer overflow results in -128.

source
``sum(itr)``

Returns the sum of all elements in a collection.

The return type is `Int` for signed integers of less than system word size, and `UInt` for unsigned integers of less than system word size. For all other arguments, a common return type is found to which all arguments are promoted.

``````julia> sum(1:20)
210``````
source
``sum(A::AbstractArray, dims)``

Sum elements of an array over the given dimensions.

Examples

``````julia> A = [1 2; 3 4]
2×2 Array{Int64,2}:
1  2
3  4

julia> sum(A, 1)
1×2 Array{Int64,2}:
4  6

julia> sum(A, 2)
2×1 Array{Int64,2}:
3
7``````
source
``sum!(r, A)``

Sum elements of `A` over the singleton dimensions of `r`, and write results to `r`.

Examples

``````julia> A = [1 2; 3 4]
2×2 Array{Int64,2}:
1  2
3  4

julia> sum!([1; 1], A)
2-element Array{Int64,1}:
3
7

julia> sum!([1 1], A)
1×2 Array{Int64,2}:
4  6``````
source
``prod(f, itr)``

Returns the product of `f` applied to each element of `itr`.

The return type is `Int` for signed integers of less than system word size, and `UInt` for unsigned integers of less than system word size. For all other arguments, a common return type is found to which all arguments are promoted.

``````julia> prod(abs2, [2; 3; 4])
576``````
source
``prod(itr)``

Returns the product of all elements of a collection.

The return type is `Int` for signed integers of less than system word size, and `UInt` for unsigned integers of less than system word size. For all other arguments, a common return type is found to which all arguments are promoted.

``````julia> prod(1:20)
2432902008176640000``````
source
``prod(A::AbstractArray, dims)``

Multiply elements of an array over the given dimensions.

Examples

``````julia> A = [1 2; 3 4]
2×2 Array{Int64,2}:
1  2
3  4

julia> prod(A, 1)
1×2 Array{Int64,2}:
3  8

julia> prod(A, 2)
2×1 Array{Int64,2}:
2
12``````
source
``prod!(r, A)``

Multiply elements of `A` over the singleton dimensions of `r`, and write results to `r`.

Examples

``````julia> A = [1 2; 3 4]
2×2 Array{Int64,2}:
1  2
3  4

julia> prod!([1; 1], A)
2-element Array{Int64,1}:
2
12

julia> prod!([1 1], A)
1×2 Array{Int64,2}:
3  8``````
source
``any(itr) -> Bool``

Test whether any elements of a boolean collection are `true`, returning `true` as soon as the first `true` value in `itr` is encountered (short-circuiting).

``````julia> a = [true,false,false,true]
4-element Array{Bool,1}:
true
false
false
true

julia> any(a)
true

julia> any((println(i); v) for (i, v) in enumerate(a))
1
true``````
source
``any(A, dims)``

Test whether any values along the given dimensions of an array are `true`.

Examples

``````julia> A = [true false; true false]
2×2 Array{Bool,2}:
true  false
true  false

julia> any(A, 1)
1×2 Array{Bool,2}:
true  false

julia> any(A, 2)
2×1 Array{Bool,2}:
true
true``````
source
``any!(r, A)``

Test whether any values in `A` along the singleton dimensions of `r` are `true`, and write results to `r`.

Examples

``````julia> A = [true false; true false]
2×2 Array{Bool,2}:
true  false
true  false

julia> any!([1; 1], A)
2-element Array{Int64,1}:
1
1

julia> any!([1 1], A)
1×2 Array{Int64,2}:
1  0``````
source
``all(itr) -> Bool``

Test whether all elements of a boolean collection are `true`, returning `false` as soon as the first `false` value in `itr` is encountered (short-circuiting).

``````julia> a = [true,false,false,true]
4-element Array{Bool,1}:
true
false
false
true

julia> all(a)
false

julia> all((println(i); v) for (i, v) in enumerate(a))
1
2
false``````
source
``all(A, dims)``

Test whether all values along the given dimensions of an array are `true`.

Examples

``````julia> A = [true false; true true]
2×2 Array{Bool,2}:
true  false
true   true

julia> all(A, 1)
1×2 Array{Bool,2}:
true  false

julia> all(A, 2)
2×1 Array{Bool,2}:
false
true``````
source
``all!(r, A)``

Test whether all values in `A` along the singleton dimensions of `r` are `true`, and write results to `r`.

Examples

``````julia> A = [true false; true false]
2×2 Array{Bool,2}:
true  false
true  false

julia> all!([1; 1], A)
2-element Array{Int64,1}:
0
0

julia> all!([1 1], A)
1×2 Array{Int64,2}:
1  0``````
source
``````count(p, itr) -> Integer
count(itr) -> Integer``````

Count the number of elements in `itr` for which predicate `p` returns `true`. If `p` is omitted, counts the number of `true` elements in `itr` (which should be a collection of boolean values).

``````julia> count(i->(4<=i<=6), [2,3,4,5,6])
3

julia> count([true, false, true, true])
3``````
source
``LibGit2.count(f::Function, walker::GitRevWalker; oid::GitHash=GitHash(), by::Cint=Consts.SORT_NONE, rev::Bool=false)``

Using the `GitRevWalker` `walker` to "walk" over every commit in the repository's history, find the number of commits which return `true` when `f` is applied to them. The keyword arguments are: * `oid`: The `GitHash` of the commit to begin the walk from. The default is to use `push_head!` and therefore the HEAD commit and all its ancestors. * `by`: The sorting method. The default is not to sort. Other options are to sort by topology (`LibGit2.Consts.SORT_TOPOLOGICAL`), to sort forwards in time (`LibGit2.Consts.SORT_TIME`, most ancient first) or to sort backwards in time (`LibGit2.Consts.SORT_REVERSE`, most recent first). * `rev`: Whether to reverse the sorted order (for instance, if topological sorting is used).

Examples

``````cnt = LibGit2.with(LibGit2.GitRevWalker(repo)) do walker
count((oid, repo)->(oid == commit_oid1), walker, oid=commit_oid1, by=LibGit2.Consts.SORT_TIME)
end``````

`count` finds the number of commits along the walk with a certain `GitHash` `commit_oid1`, starting the walk from that commit and moving forwards in time from it. Since the `GitHash` is unique to a commit, `cnt` will be `1`.

source
``any(p, itr) -> Bool``

Determine whether predicate `p` returns `true` for any elements of `itr`, returning `true` as soon as the first item in `itr` for which `p` returns `true` is encountered (short-circuiting).

If the input contains `missing` values, return `missing` if all non-missing values are `false` (or equivalently, if the input contains no `true` value).

``````julia> any(i->(4<=i<=6), [3,5,7])
true

julia> any(i -> (println(i); i > 3), 1:10)
1
2
3
4
true``````
source
``all(p, itr) -> Bool``

Determine whether predicate `p` returns `true` for all elements of `itr`, returning `false` as soon as the first item in `itr` for which `p` returns `false` is encountered (short-circuiting).

If the input contains `missing` values, return `missing` if all non-missing values are `true` (or equivalently, if the input contains no `false` value).

``````julia> all(i->(4<=i<=6), [4,5,6])
true

julia> all(i -> (println(i); i < 3), 1:10)
1
2
3
false``````
source
``foreach(f, c...) -> Nothing``

Call function `f` on each element of iterable `c`. For multiple iterable arguments, `f` is called elementwise. `foreach` should be used instead of `map` when the results of `f` are not needed, for example in `foreach(println, array)`.

Examples

``````julia> a = 1:3:7;

julia> foreach(x -> println(x^2), a)
1
16
49``````
source
``map(f, c...) -> collection``

Transform collection `c` by applying `f` to each element. For multiple collection arguments, apply `f` elementwise.

See also: `mapslices`

Examples

``````julia> map(x -> x * 2, [1, 2, 3])
3-element Array{Int64,1}:
2
4
6

julia> map(+, [1, 2, 3], [10, 20, 30])
3-element Array{Int64,1}:
11
22
33``````
source
``LibGit2.map(f::Function, walker::GitRevWalker; oid::GitHash=GitHash(), range::AbstractString="", by::Cint=Consts.SORT_NONE, rev::Bool=false)``

Using the `GitRevWalker` `walker` to "walk" over every commit in the repository's history, apply `f` to each commit in the walk. The keyword arguments are: * `oid`: The `GitHash` of the commit to begin the walk from. The default is to use `push_head!` and therefore the HEAD commit and all its ancestors. * `range`: A range of `GitHash`s in the format `oid1..oid2`. `f` will be applied to all commits between the two. * `by`: The sorting method. The default is not to sort. Other options are to sort by topology (`LibGit2.Consts.SORT_TOPOLOGICAL`), to sort forwards in time (`LibGit2.Consts.SORT_TIME`, most ancient first) or to sort backwards in time (`LibGit2.Consts.SORT_REVERSE`, most recent first). * `rev`: Whether to reverse the sorted order (for instance, if topological sorting is used).

Examples

``````oids = LibGit2.with(LibGit2.GitRevWalker(repo)) do walker
LibGit2.map((oid, repo)->string(oid), walker, by=LibGit2.Consts.SORT_TIME)
end``````

Here, `map` visits each commit using the `GitRevWalker` and finds its `GitHash`.

source
``map!(function, destination, collection...)``

Like `map`, but stores the result in `destination` rather than a new collection. `destination` must be at least as large as the first collection.

Examples

``````julia> x = zeros(3);

julia> map!(x -> x * 2, x, [1, 2, 3]);

julia> x
3-element Array{Float64,1}:
2.0
4.0
6.0``````
source
``mapreduce(f, op, v0, itr)``

Apply function `f` to each element in `itr`, and then reduce the result using the binary function `op`. `v0` must be a neutral element for `op` that will be returned for empty collections. It is unspecified whether `v0` is used for non-empty collections.

`mapreduce` is functionally equivalent to calling `reduce(op, v0, map(f, itr))`, but will in general execute faster since no intermediate collection needs to be created. See documentation for `reduce` and `map`.

``````julia> mapreduce(x->x^2, +, [1:3;]) # == 1 + 4 + 9
14``````

The associativity of the reduction is implementation-dependent. Additionally, some implementations may reuse the return value of `f` for elements that appear multiple times in `itr`. Use `mapfoldl` or `mapfoldr` instead for guaranteed left or right associativity and invocation of `f` for every value.

source
``mapreduce(f, op, itr)``

Like `mapreduce(f, op, v0, itr)`. In general, this cannot be used with empty collections (see `reduce(op, itr)`).

source
``mapfoldl(f, op, v0, itr)``

Like `mapreduce`, but with guaranteed left associativity, as in `foldl`. `v0` will be used exactly once.

source
``mapfoldl(f, op, itr)``

Like `mapfoldl(f, op, v0, itr)`, but using the first element of `itr` to generate `v0`. Specifically, `mapfoldl(f, op, itr)` produces the same result as `mapfoldl(f, op, f(first(itr)), drop(itr, 1))`. In general, this cannot be used with empty collections (see `reduce(op, itr)`).

source
``mapfoldr(f, op, v0, itr)``

Like `mapreduce`, but with guaranteed right associativity, as in `foldr`. `v0` will be used exactly once.

source
``mapfoldr(f, op, itr)``

Like `mapfoldr(f, op, v0, itr)`, but using the first element of `itr` to generate `v0`. Specifically, `mapfoldr(f, op, itr)` produces the same result as `mapfoldr(f, op, f(last(itr)), take(itr, length(itr)-1))`. In general, this cannot be used with empty collections (see `reduce(op, itr)`).

source
``first(coll)``

Get the first element of an iterable collection. Return the start point of an `AbstractRange` even if it is empty.

Examples

``````julia> first(2:2:10)
2

julia> first([1; 2; 3; 4])
1``````
source
``first(s::AbstractString, n::Integer)``

Get a string consisting of the first `n` characters of `s`.

``````julia> first("∀ϵ≠0: ϵ²>0", 0)
""

julia> first("∀ϵ≠0: ϵ²>0", 1)
"∀"

julia> first("∀ϵ≠0: ϵ²>0", 3)
"∀ϵ≠"``````
source
``last(coll)``

Get the last element of an ordered collection, if it can be computed in O(1) time. This is accomplished by calling `lastindex` to get the last index. Return the end point of an `AbstractRange` even if it is empty.

Examples

``````julia> last(1:2:10)
9

julia> last([1; 2; 3; 4])
4``````
source
``last(s::AbstractString, n::Integer)``

Get a string consisting of the last `n` characters of `s`.

``````julia> last("∀ϵ≠0: ϵ²>0", 0)
""

julia> last("∀ϵ≠0: ϵ²>0", 1)
"0"

julia> last("∀ϵ≠0: ϵ²>0", 3)
"²>0"``````
source
``step(r)``

Get the step size of an `AbstractRange` object.

``````julia> step(1:10)
1

julia> step(1:2:10)
2

julia> step(2.5:0.3:10.9)
0.3

julia> step(range(2.5, stop=10.9, length=85))
0.1``````
source
``collect(collection)``

Return an `Array` of all items in a collection or iterator. For dictionaries, returns `Pair{KeyType, ValType}`. If the argument is array-like or is an iterator with the `HasShape` trait, the result will have the same shape and number of dimensions as the argument.

Examples

``````julia> collect(1:2:13)
7-element Array{Int64,1}:
1
3
5
7
9
11
13``````
source
``collect(element_type, collection)``

Return an `Array` with the given element type of all items in a collection or iterable. The result has the same shape and number of dimensions as `collection`.

Examples

``````julia> collect(Float64, 1:2:5)
3-element Array{Float64,1}:
1.0
3.0
5.0``````
source
``````issubset(a, b)
⊆(a,b) -> Bool
⊈(a,b) -> Bool
⊊(a,b) -> Bool``````

Determine whether every element of `a` is also in `b`, using `in`.

Examples

``````julia> issubset([1, 2], [1, 2, 3])
true

julia> issubset([1, 2, 3], [1, 2])
false``````
source
``filter(f, a::AbstractArray)``

Return a copy of `a`, removing elements for which `f` is `false`. The function `f` is passed one argument.

Examples

``````julia> a = 1:10
1:10

julia> filter(isodd, a)
5-element Array{Int64,1}:
1
3
5
7
9``````
source
``filter(f, d::AbstractDict)``

Return a copy of `d`, removing elements for which `f` is `false`. The function `f` is passed `key=>value` pairs.

Examples

``````julia> d = Dict(1=>"a", 2=>"b")
Dict{Int64,String} with 2 entries:
2 => "b"
1 => "a"

julia> filter(p->isodd(p.first), d)
Dict{Int64,String} with 1 entry:
1 => "a"``````
source
``filter!(f, a::AbstractVector)``

Update `a`, removing elements for which `f` is `false`. The function `f` is passed one argument.

Examples

``````julia> filter!(isodd, Vector(1:10))
5-element Array{Int64,1}:
1
3
5
7
9``````
source
``filter!(f, d::AbstractDict)``

Update `d`, removing elements for which `f` is `false`. The function `f` is passed `key=>value` pairs.

Example

``````julia> d = Dict(1=>"a", 2=>"b", 3=>"c")
Dict{Int64,String} with 3 entries:
2 => "b"
3 => "c"
1 => "a"

julia> filter!(p->isodd(p.first), d)
Dict{Int64,String} with 2 entries:
3 => "c"
1 => "a"``````
source
``replace(A, old_new::Pair...; [count::Integer])``

Return a copy of collection `A` where, for each pair `old=>new` in `old_new`, all occurrences of `old` are replaced by `new`. Equality is determined using `isequal`. If `count` is specified, then replace at most `count` occurrences in total. See also `replace!`.

Examples

``````julia> replace([1, 2, 1, 3], 1=>0, 2=>4, count=2)
4-element Array{Int64,1}:
0
4
1
3``````
source
``replace(pred::Function, A, new; [count::Integer])``

Return a copy of collection `A` where all occurrences `x` for which `pred(x)` is true are replaced by `new`. If `count` is specified, then replace at most `count` occurrences in total.

Examples

``````julia> replace(isodd, [1, 2, 3, 1], 0, count=2)
4-element Array{Int64,1}:
0
2
0
1``````
source
``replace(new::Function, A; [count::Integer])``

Return a copy of `A` where each value `x` in `A` is replaced by `new(x)` If `count` is specified, then replace at most `count` values in total (replacements being defined as `new(x) !== x`).

Examples

``````julia> replace(x -> isodd(x) ? 2x : x, [1, 2, 3, 4])
4-element Array{Int64,1}:
2
2
6
4

julia> replace(Dict(1=>2, 3=>4)) do kv
first(kv) < 3 ? first(kv)=>3 : kv
end
Dict{Int64,Int64} with 2 entries:
3 => 4
1 => 3``````
source
``replace!(A, old_new::Pair...; [count::Integer])``

For each pair `old=>new` in `old_new`, replace all occurrences of `old` in collection `A` by `new`. Equality is determined using `isequal`. If `count` is specified, then replace at most `count` occurrences in total. See also `replace`.

Examples

``````julia> replace!([1, 2, 1, 3], 1=>0, 2=>4, count=2)
4-element Array{Int64,1}:
0
4
1
3

julia> replace!(Set([1, 2, 3]), 1=>0)
Set([0, 2, 3])``````
source
``replace!(pred::Function, A, new; [count::Integer])``

Replace all occurrences `x` in collection `A` for which `pred(x)` is true by `new`.

Examples

``````julia> A = [1, 2, 3, 1];

julia> replace!(isodd, A, 0, count=2)
4-element Array{Int64,1}:
0
2
0
1``````
source
``replace!(new::Function, A; [count::Integer])``

Replace each element `x` in collection `A` by `new(x)`. If `count` is specified, then replace at most `count` values in total (replacements being defined as `new(x) !== x`).

Examples

``````julia> replace!(x -> isodd(x) ? 2x : x, [1, 2, 3, 4])
4-element Array{Int64,1}:
2
2
6
4

julia> replace!(Dict(1=>2, 3=>4)) do kv
first(kv) < 3 ? first(kv)=>3 : kv
end
Dict{Int64,Int64} with 2 entries:
3 => 4
1 => 3

julia> replace!(x->2x, Set([3, 6]))
Set([6, 12])``````
source

## Indexable Collections

``getindex(collection, key...)``

Retrieve the value(s) stored at the given key or index within a collection. The syntax `a[i,j,...]` is converted by the compiler to `getindex(a, i, j, ...)`.

Examples

``````julia> A = Dict("a" => 1, "b" => 2)
Dict{String,Int64} with 2 entries:
"b" => 2
"a" => 1

julia> getindex(A, "a")
1``````
source
``setindex!(collection, value, key...)``

Store the given value at the given key or index within a collection. The syntax `a[i,j,...] = x` is converted by the compiler to `(setindex!(a, x, i, j, ...); x)`.

source
``firstindex(collection) -> Integer``

Return the first index of the collection.

Examples

``````julia> firstindex([1,2,4])
1``````
source
``lastindex(collection) -> Integer``

Return the last index of the collection.

Examples

``````julia> lastindex([1,2,4])
3``````
source

Fully implemented by:

Partially implemented by:

## Dictionaries

`Dict` is the standard dictionary. Its implementation uses `hash` as the hashing function for the key, and `isequal` to determine equality. Define these two functions for custom types to override how they are stored in a hash table.

`IdDict` is a special hash table where the keys are always object identities.

`WeakKeyDict` is a hash table implementation where the keys are weak references to objects, and thus may be garbage collected even when referenced in a hash table.

`Dict`s can be created by passing pair objects constructed with `=>` to a `Dict` constructor: `Dict("A"=>1, "B"=>2)`. This call will attempt to infer type information from the keys and values (i.e. this example creates a `Dict{String, Int64}`). To explicitly specify types use the syntax `Dict{KeyType,ValueType}(...)`. For example, `Dict{String,Int32}("A"=>1, "B"=>2)`.

Dictionaries may also be created with generators. For example, `Dict(i => f(i) for i = 1:10)`.

Given a dictionary `D`, the syntax `D[x]` returns the value of key `x` (if it exists) or throws an error, and `D[x] = y` stores the key-value pair `x => y` in `D` (replacing any existing value for the key `x`). Multiple arguments to `D[...]` are converted to tuples; for example, the syntax `D[x,y]` is equivalent to `D[(x,y)]`, i.e. it refers to the value keyed by the tuple `(x,y)`.

``Dict([itr])``

`Dict{K,V}()` constructs a hash table with keys of type `K` and values of type `V`.

Given a single iterable argument, constructs a `Dict` whose key-value pairs are taken from 2-tuples `(key,value)` generated by the argument.

``````julia> Dict([("A", 1), ("B", 2)])
Dict{String,Int64} with 2 entries:
"B" => 2
"A" => 1``````

Alternatively, a sequence of pair arguments may be passed.

``````julia> Dict("A"=>1, "B"=>2)
Dict{String,Int64} with 2 entries:
"B" => 2
"A" => 1``````
source
``IdDict([itr])``

`IdDict{K,V}()` constructs a hash table using object-id as hash and `===` as equality with keys of type `K` and values of type `V`.

See `Dict` for further help.

source
``WeakKeyDict([itr])``

`WeakKeyDict()` constructs a hash table where the keys are weak references to objects, and thus may be garbage collected even when referenced in a hash table.

See `Dict` for further help.

source
``ImmutableDict``

ImmutableDict is a Dictionary implemented as an immutable linked list, which is optimal for small dictionaries that are constructed over many individual insertions Note that it is not possible to remove a value, although it can be partially overridden and hidden by inserting a new value with the same key

``ImmutableDict(KV::Pair)``

Create a new entry in the Immutable Dictionary for the key => value pair

• use `(key => value) in dict` to see if this particular combination is in the properties set

• use `get(dict, key, default)` to retrieve the most recent value for a particular key

source
``haskey(collection, key) -> Bool``

Determine whether a collection has a mapping for a given key.

``````julia> a = Dict('a'=>2, 'b'=>3)
Dict{Char,Int64} with 2 entries:
'b' => 3
'a' => 2

true

false``````
source
``get(collection, key, default)``

Return the value stored for the given key, or the given default value if no mapping for the key is present.

Examples

``````julia> d = Dict("a"=>1, "b"=>2);

julia> get(d, "a", 3)
1

julia> get(d, "c", 3)
3``````
source
``get(collection, key, default)``

Return the value stored for the given key, or the given default value if no mapping for the key is present.

Examples

``````julia> d = Dict("a"=>1, "b"=>2);

julia> get(d, "a", 3)
1

julia> get(d, "c", 3)
3``````
source
``get(f::Function, collection, key)``

Return the value stored for the given key, or if no mapping for the key is present, return `f()`. Use `get!` to also store the default value in the dictionary.

This is intended to be called using `do` block syntax

``````get(dict, key) do
# default value calculated here
time()
end``````
source
``get!(collection, key, default)``

Return the value stored for the given key, or if no mapping for the key is present, store `key => default`, and return `default`.

Examples

``````julia> d = Dict("a"=>1, "b"=>2, "c"=>3);

julia> get!(d, "a", 5)
1

julia> get!(d, "d", 4)
4

julia> d
Dict{String,Int64} with 4 entries:
"c" => 3
"b" => 2
"a" => 1
"d" => 4``````
source
``get!(f::Function, collection, key)``

Return the value stored for the given key, or if no mapping for the key is present, store `key => f()`, and return `f()`.

This is intended to be called using `do` block syntax:

``````get!(dict, key) do
# default value calculated here
time()
end``````
source
``getkey(collection, key, default)``

Return the key matching argument `key` if one exists in `collection`, otherwise return `default`.

``````julia> a = Dict('a'=>2, 'b'=>3)
Dict{Char,Int64} with 2 entries:
'b' => 3
'a' => 2

julia> getkey(a,'a',1)
'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)

julia> getkey(a,'d','a')
'a': ASCII/Unicode U+0061 (category Ll: Letter, lowercase)``````
source
``delete!(collection, key)``

Delete the mapping for the given key in a collection, and return the collection.

Examples

``````julia> d = Dict("a"=>1, "b"=>2)
Dict{String,Int64} with 2 entries:
"b" => 2
"a" => 1

julia> delete!(d, "b")
Dict{String,Int64} with 1 entry:
"a" => 1``````
source
``pop!(collection, key[, default])``

Delete and return the mapping for `key` if it exists in `collection`, otherwise return `default`, or throw an error if `default` is not specified.

Examples

``````julia> d = Dict("a"=>1, "b"=>2, "c"=>3);

julia> pop!(d, "a")
1

julia> pop!(d, "d")
Stacktrace:
[...]

julia> pop!(d, "e", 4)
4``````
source
``keys(iterator)``

For an iterator or collection that has keys and values (e.g. arrays and dictionaries), return an iterator over the keys.

source
``values(iterator)``

For an iterator or collection that has keys and values, return an iterator over the values. This function simply returns its argument by default, since the elements of a general iterator are normally considered its "values".

Examples

``````julia> d = Dict("a"=>1, "b"=>2);

julia> values(d)
Base.ValueIterator for a Dict{String,Int64} with 2 entries. Values:
2
1

julia> values([2])
1-element Array{Int64,1}:
2``````
source
``values(a::AbstractDict)``

Return an iterator over all values in a collection. `collect(values(a))` returns an array of values. Since the values are stored internally in a hash table, the order in which they are returned may vary. But `keys(a)` and `values(a)` both iterate `a` and return the elements in the same order.

Examples

``````julia> a = Dict('a'=>2, 'b'=>3)
Dict{Char,Int64} with 2 entries:
'b' => 3
'a' => 2

julia> collect(values(a))
2-element Array{Int64,1}:
3
2``````
source
``pairs(collection)``

Return an iterator over `key => value` pairs for any collection that maps a set of keys to a set of values. This includes arrays, where the keys are the array indices.

source
``````pairs(IndexLinear(), A)
pairs(IndexCartesian(), A)
pairs(IndexStyle(A), A)``````

An iterator that accesses each element of the array `A`, returning `i => x`, where `i` is the index for the element and `x = A[i]`. Identical to `pairs(A)`, except that the style of index can be selected. Also similar to `enumerate(A)`, except `i` will be a valid index for `A`, while `enumerate` always counts from 1 regardless of the indices of `A`.

Specifying `IndexLinear()` ensures that `i` will be an integer; specifying `IndexCartesian()` ensures that `i` will be a `CartesianIndex`; specifying `IndexStyle(A)` chooses whichever has been defined as the native indexing style for array `A`.

Mutation of the bounds of the underlying array will invalidate this iterator.

Examples

``````julia> A = ["a" "d"; "b" "e"; "c" "f"];

julia> for (index, value) in pairs(IndexStyle(A), A)
println("\$index \$value")
end
1 a
2 b
3 c
4 d
5 e
6 f

julia> S = view(A, 1:2, :);

julia> for (index, value) in pairs(IndexStyle(S), S)
println("\$index \$value")
end
CartesianIndex(1, 1) a
CartesianIndex(2, 1) b
CartesianIndex(1, 2) d
CartesianIndex(2, 2) e``````

See also: `IndexStyle`, `axes`.

source
``merge(d::AbstractDict, others::AbstractDict...)``

Construct a merged collection from the given collections. If necessary, the types of the resulting collection will be promoted to accommodate the types of the merged collections. If the same key is present in another collection, the value for that key will be the value it has in the last collection listed.

Examples

``````julia> a = Dict("foo" => 0.0, "bar" => 42.0)
Dict{String,Float64} with 2 entries:
"bar" => 42.0
"foo" => 0.0

julia> b = Dict("baz" => 17, "bar" => 4711)
Dict{String,Int64} with 2 entries:
"bar" => 4711
"baz" => 17

julia> merge(a, b)
Dict{String,Float64} with 3 entries:
"bar" => 4711.0
"baz" => 17.0
"foo" => 0.0

julia> merge(b, a)
Dict{String,Float64} with 3 entries:
"bar" => 42.0
"baz" => 17.0
"foo" => 0.0``````
source
``merge(combine, d::AbstractDict, others::AbstractDict...)``

Construct a merged collection from the given collections. If necessary, the types of the resulting collection will be promoted to accommodate the types of the merged collections. Values with the same key will be combined using the combiner function.

Examples

``````julia> a = Dict("foo" => 0.0, "bar" => 42.0)
Dict{String,Float64} with 2 entries:
"bar" => 42.0
"foo" => 0.0

julia> b = Dict("baz" => 17, "bar" => 4711)
Dict{String,Int64} with 2 entries:
"bar" => 4711
"baz" => 17

julia> merge(+, a, b)
Dict{String,Float64} with 3 entries:
"bar" => 4753.0
"baz" => 17.0
"foo" => 0.0``````
source
``merge(a::NamedTuple, b::NamedTuple)``

Construct a new named tuple by merging two existing ones. The order of fields in `a` is preserved, but values are taken from matching fields in `b`. Fields present only in `b` are appended at the end.

``````julia> merge((a=1, b=2, c=3), (b=4, d=5))
(a = 1, b = 4, c = 3, d = 5)``````
source
``merge(a::NamedTuple, iterable)``

Interpret an iterable of key-value pairs as a named tuple, and perform a merge.

``````julia> merge((a=1, b=2, c=3), [:b=>4, :d=>5])
(a = 1, b = 4, c = 3, d = 5)``````
source
``merge!(d::AbstractDict, others::AbstractDict...)``

Update collection with pairs from the other collections. See also `merge`.

Examples

``````julia> d1 = Dict(1 => 2, 3 => 4);

julia> d2 = Dict(1 => 4, 4 => 5);

julia> merge!(d1, d2);

julia> d1
Dict{Int64,Int64} with 3 entries:
4 => 5
3 => 4
1 => 4``````
source
``merge!(combine, d::AbstractDict, others::AbstractDict...)``

Update collection with pairs from the other collections. Values with the same key will be combined using the combiner function.

Examples

``````julia> d1 = Dict(1 => 2, 3 => 4);

julia> d2 = Dict(1 => 4, 4 => 5);

julia> merge!(+, d1, d2);

julia> d1
Dict{Int64,Int64} with 3 entries:
4 => 5
3 => 4
1 => 6

julia> merge!(-, d1, d1);

julia> d1
Dict{Int64,Int64} with 3 entries:
4 => 0
3 => 0
1 => 0``````
source
``sizehint!(s, n)``

Suggest that collection `s` reserve capacity for at least `n` elements. This can improve performance.

source
``keytype(type)``

Get the key type of an dictionary type. Behaves similarly to `eltype`.

Examples

``````julia> keytype(Dict(Int32(1) => "foo"))
Int32``````
source
``valtype(type)``

Get the value type of an dictionary type. Behaves similarly to `eltype`.

Examples

``````julia> valtype(Dict(Int32(1) => "foo"))
String``````
source

Fully implemented by:

Partially implemented by:

## Set-Like Collections

``Set([itr])``

Construct a `Set` of the values generated by the given iterable object, or an empty set. Should be used instead of `BitSet` for sparse integer sets, or for sets of arbitrary objects.

source
``BitSet([itr])``

Construct a sorted set of `Int`s generated by the given iterable object, or an empty set. Implemented as a bit string, and therefore designed for dense integer sets. If the set will be sparse (for example, holding a few very large integers), use `Set` instead.

source
``````union(s, itrs...)
∪(s, itrs...)``````

Construct the union of sets. Maintain order with arrays.

Examples

``````julia> union([1, 2], [3, 4])
4-element Array{Int64,1}:
1
2
3
4

julia> union([1, 2], [2, 4])
3-element Array{Int64,1}:
1
2
4

julia> union([4, 2], 1:2)
3-element Array{Int64,1}:
4
2
1

julia> union(Set([1, 2]), 2:3)
Set([2, 3, 1])``````
source
``union!(s::Union{AbstractSet,AbstractVector}, itrs...)``

Construct the union of passed in sets and overwrite `s` with the result. Maintain order with arrays.

Examples

``````julia> a = Set([1, 3, 4, 5]);

julia> union!(a, 1:2:8);

julia> a
Set([7, 4, 3, 5, 1])``````
source
``````intersect(s, itrs...)
∩(s, itrs...)``````

Construct the intersection of sets. Maintain order with arrays.

Examples

``````julia> intersect([1, 2, 3], [3, 4, 5])
1-element Array{Int64,1}:
3

julia> intersect([1, 4, 4, 5, 6], [4, 6, 6, 7, 8])
2-element Array{Int64,1}:
4
6

julia> intersect(Set([1, 2]), BitSet([2, 3]))
Set([2])``````
source
``setdiff(s, itrs...)``

Construct the set of elements in `s` but not in any of the iterables in `itrs`. Maintain order with arrays.

Examples

``````julia> setdiff([1,2,3], [3,4,5])
2-element Array{Int64,1}:
1
2``````
source
``setdiff!(s, itrs...)``

Remove from set `s` (in-place) each element of each iterable from `itrs`. Maintain order with arrays.

Examples

``````julia> a = Set([1, 3, 4, 5]);

julia> setdiff!(a, 1:2:6);

julia> a
Set([4])``````
source
``symdiff(s, itrs...)``

Construct the symmetric difference of elements in the passed in sets. When `s` is not an `AbstractSet`, the order is maintained. Note that in this case the multiplicity of elements matters.

Examples

``````julia> symdiff([1,2,3], [3,4,5], [4,5,6])
3-element Array{Int64,1}:
1
2
6

julia> symdiff([1,2,1], [2, 1, 2])
2-element Array{Int64,1}:
1
2

julia> symdiff(unique([1,2,1]), unique([2, 1, 2]))
0-element Array{Int64,1}``````
source
``symdiff!(s::Union{AbstractSet,AbstractVector}, itrs...)``

Construct the symmetric difference of the passed in sets, and overwrite `s` with the result. When `s` is an array, the order is maintained. Note that in this case the multiplicity of elements matters.

source
``intersect!(s::Union{AbstractSet,AbstractVector}, itrs...)``

Intersect all passed in sets and overwrite `s` with the result. Maintain order with arrays.

source
``````issubset(a, b)
⊆(a,b) -> Bool
⊈(a,b) -> Bool
⊊(a,b) -> Bool``````

Determine whether every element of `a` is also in `b`, using `in`.

Examples

``````julia> issubset([1, 2], [1, 2, 3])
true

julia> issubset([1, 2, 3], [1, 2])
false``````
source

Fully implemented by:

Partially implemented by:

## Dequeues

``push!(collection, items...) -> collection``

Insert one or more `items` at the end of `collection`.

Examples

``````julia> push!([1, 2, 3], 4, 5, 6)
6-element Array{Int64,1}:
1
2
3
4
5
6``````

Use `append!` to add all the elements of another collection to `collection`. The result of the preceding example is equivalent to `append!([1, 2, 3], [4, 5, 6])`.

source
``pop!(collection) -> item``

Remove an item in `collection` and return it. If `collection` is an ordered container, the last item is returned.

Examples

``````julia> A=[1, 2, 3]
3-element Array{Int64,1}:
1
2
3

julia> pop!(A)
3

julia> A
2-element Array{Int64,1}:
1
2

julia> S = Set([1, 2])
Set([2, 1])

julia> pop!(S)
2

julia> S
Set([1])

julia> pop!(Dict(1=>2))
1 => 2``````
source
``pop!(collection, key[, default])``

Delete and return the mapping for `key` if it exists in `collection`, otherwise return `default`, or throw an error if `default` is not specified.

Examples

``````julia> d = Dict("a"=>1, "b"=>2, "c"=>3);

julia> pop!(d, "a")
1

julia> pop!(d, "d")
Stacktrace:
[...]

julia> pop!(d, "e", 4)
4``````
source
``pushfirst!(collection, items...) -> collection``

Insert one or more `items` at the beginning of `collection`.

Examples

``````julia> pushfirst!([1, 2, 3, 4], 5, 6)
6-element Array{Int64,1}:
5
6
1
2
3
4``````
source
``popfirst!(collection) -> item``

Remove the first `item` from `collection`.

Examples

``````julia> A = [1, 2, 3, 4, 5, 6]
6-element Array{Int64,1}:
1
2
3
4
5
6

julia> popfirst!(A)
1

julia> A
5-element Array{Int64,1}:
2
3
4
5
6``````
source
``insert!(a::Vector, index::Integer, item)``

Insert an `item` into `a` at the given `index`. `index` is the index of `item` in the resulting `a`.

Examples

``````julia> insert!([6, 5, 4, 2, 1], 4, 3)
6-element Array{Int64,1}:
6
5
4
3
2
1``````
source
``deleteat!(a::Vector, i::Integer)``

Remove the item at the given `i` and return the modified `a`. Subsequent items are shifted to fill the resulting gap.

Examples

``````julia> deleteat!([6, 5, 4, 3, 2, 1], 2)
5-element Array{Int64,1}:
6
4
3
2
1``````
source
``deleteat!(a::Vector, inds)``

Remove the items at the indices given by `inds`, and return the modified `a`. Subsequent items are shifted to fill the resulting gap.

`inds` can be either an iterator or a collection of sorted and unique integer indices, or a boolean vector of the same length as `a` with `true` indicating entries to delete.

Examples

``````julia> deleteat!([6, 5, 4, 3, 2, 1], 1:2:5)
3-element Array{Int64,1}:
5
3
1

julia> deleteat!([6, 5, 4, 3, 2, 1], [true, false, true, false, true, false])
3-element Array{Int64,1}:
5
3
1

julia> deleteat!([6, 5, 4, 3, 2, 1], (2, 2))
ERROR: ArgumentError: indices must be unique and sorted
Stacktrace:
[...]``````
source
``splice!(a::Vector, index::Integer, [replacement]) -> item``

Remove the item at the given index, and return the removed item. Subsequent items are shifted left to fill the resulting gap. If specified, replacement values from an ordered collection will be spliced in place of the removed item.

Examples

``````julia> A = [6, 5, 4, 3, 2, 1]; splice!(A, 5)
2

julia> A
5-element Array{Int64,1}:
6
5
4
3
1

julia> splice!(A, 5, -1)
1

julia> A
5-element Array{Int64,1}:
6
5
4
3
-1

julia> splice!(A, 1, [-1, -2, -3])
6

julia> A
7-element Array{Int64,1}:
-1
-2
-3
5
4
3
-1``````

To insert `replacement` before an index `n` without removing any items, use `splice!(collection, n:n-1, replacement)`.

source
``splice!(a::Vector, range, [replacement]) -> items``

Remove items in the specified index range, and return a collection containing the removed items. Subsequent items are shifted left to fill the resulting gap. If specified, replacement values from an ordered collection will be spliced in place of the removed items.

To insert `replacement` before an index `n` without removing any items, use `splice!(collection, n:n-1, replacement)`.

Examples

``````julia> splice!(A, 4:3, 2)
0-element Array{Int64,1}

julia> A
8-element Array{Int64,1}:
-1
-2
-3
2
5
4
3
-1``````
source
``resize!(a::Vector, n::Integer) -> Vector``

Resize `a` to contain `n` elements. If `n` is smaller than the current collection length, the first `n` elements will be retained. If `n` is larger, the new elements are not guaranteed to be initialized.

Examples

``````julia> resize!([6, 5, 4, 3, 2, 1], 3)
3-element Array{Int64,1}:
6
5
4

julia> a = resize!([6, 5, 4, 3, 2, 1], 8);

julia> length(a)
8

julia> a[1:6]
6-element Array{Int64,1}:
6
5
4
3
2
1``````
source
``append!(collection, collection2) -> collection.``

Add the elements of `collection2` to the end of `collection`.

Examples

``````julia> append!([1],[2,3])
3-element Array{Int64,1}:
1
2
3

julia> append!([1, 2, 3], [4, 5, 6])
6-element Array{Int64,1}:
1
2
3
4
5
6``````

Use `push!` to add individual items to `collection` which are not already themselves in another collection. The result is of the preceding example is equivalent to `push!([1, 2, 3], 4, 5, 6)`.

source
``prepend!(a::Vector, items) -> collection``

Insert the elements of `items` to the beginning of `a`.

Examples

``````julia> prepend!([3],[1,2])
3-element Array{Int64,1}:
1
2
3``````
source

Fully implemented by:

## Utility Collections

``````Pair(x, y)
x => y``````

Construct a `Pair` object with type `Pair{typeof(x), typeof(y)}`. The elements are stored in the fields `first` and `second`. They can also be accessed via iteration.

See also: `Dict`

Examples

``````julia> p = "foo" => 7
"foo" => 7

julia> typeof(p)
Pair{String,Int64}

julia> p.first
"foo"

julia> for x in p
println(x)
end
foo
7``````
source
``Iterators.Pairs(values, keys) <: AbstractDict{eltype(keys), eltype(values)}``

Transforms an indexable container into an Dictionary-view of the same data. Modifying the key-space of the underlying data may invalidate this object.

source