class

Deque(T)

Inherits Indexable::Mutable / Indexable / Enumerable / Iterable / Reference / Object

A Deque ("double-ended queue") is a collection of objects of type T that behaves much like an Array.

Deque has a subset of Array's API. It performs better than an Array when there are frequent insertions or deletions of items near the beginning or the end.

The most typical use case of a Deque is a queue: use push to add items to the end of the queue and shift to get and remove the item at the beginning of the queue.

This Deque is implemented with a dynamic array used as a circular buffer.

Constructors

additive_identity

Returns the additive identity of this type.

This is an empty deque.

Source
new(size : Int, value : T)

Creates a new Deque of the given size filled with the same value in each position.

Deque.new(3, 'a') # => Deque{'a', 'a', 'a'}
Source
new(array : Array(T))

Creates a new Deque that copies its items from an Array.

Deque.new([1, 2, 3]) # => Deque{1, 2, 3}
Source
new(initial_capacity : Int)

Creates a new empty Deque backed by a buffer that is initially initial_capacity big.

The initial_capacity is useful to avoid unnecessary reallocations of the internal buffer in case of growth. If you have an estimate of the maximum number of elements a deque will hold, you should initialize it with that capacity for improved execution performance.

deq = Deque(Int32).new(5)
deq.size # => 0
Source
new

Creates a new empty Deque

Source
new(size : Int, & : Int32 -> T)

Creates a new Deque of the given size and invokes the block once for each index of the deque, assigning the block's value in that index.

Deque.new(3) { |i| (i + 1) ** 2 } # => Deque{1, 4, 9}
Source
new(pull : JSON::PullParser, &)
Source

Class methods

from_json(string_or_io, &) : Nil
Source

Instance methods

+(other : Deque(U)) forall U

Concatenation. Returns a new Deque built by concatenating two deques together to create a third. The type of the new deque is the union of the types of both the other deques.

Source
<<(value : T)

Alias for push.

Source
==(other : Deque)

Returns true if it is passed a Deque and equals? returns true for both deques, the caller and the argument.

deq = Deque{2, 3}
deq.unshift 1
deq == Deque{1, 2, 3} # => true
deq == Deque{2, 3}    # => false
Source
clear

Removes all elements from self.

Source
clone

Returns a new Deque that has this deque's elements cloned. That is, it returns a deep copy of this deque.

Use #dup if you want a shallow copy.

Source
concat(other : Indexable) : self

Appends the elements of other to self, and returns self.

deq = Deque{"a", "b"}
deq.concat(Deque{"c", "d"})
deq # => Deque{"a", "b", "c", "d"}
Source
concat(other : Enumerable(T)) : self
Source
delete(obj) : Bool

Removes all items from self that are equal to obj.

a = Deque{"a", "b", "b", "b", "c"}
a.delete("b") # => true
a             # => Deque{"a", "c"}
Source
delete_at(index : Int) : T

Deletes the item that is present at the index. Items to the right of this one will have their indices decremented. Raises IndexError if trying to delete an element outside the deque's range.

a = Deque{1, 2, 3}
a.delete_at(1) # => 2
a              # => Deque{1, 3}
Source
dup

Returns a new Deque that has exactly this deque's elements. That is, it returns a shallow copy of this deque.

Source
each

Yields each item in this deque, from first to last.

Do not modify the deque while using this variant of each!

Source
insert(index : Int, value : T) : self

Insert a new item before the item at index. Items to the right of this one will have their indices incremented.

a = Deque{0, 1, 2}
a.insert(1, 7) # => Deque{0, 7, 1, 2}
Source
inspect(io : IO) : Nil

Appends a String representation of this object which includes its class name, its object address and the values of all instance variables.

class Person
  def initialize(@name : String, @age : Int32)
  end
end

Person.new("John", 32).inspect # => #<Person:0x10fd31f20 @name="John", @age=32>
Source
pop(n : Int) : Nil

Removes the last n (at most) items in the deque.

Source
pop

Removes and returns the last item. Raises IndexError if empty.

a = Deque{1, 2, 3}
a.pop # => 3
a     # => Deque{1, 2}
Source
pop

Removes and returns the last item, if not empty, otherwise executes the given block and returns its value.

Source
pop?

Removes and returns the last item, if not empty, otherwise nil.

Source
pretty_print(pp)
Source
push(value : T)

Adds an item to the end of the deque.

a = Deque{1, 2}
a.push 3 # => Deque{1, 2, 3}
Source
reject!

Modifies self, deleting the elements in the collection for which the passed block is truthy. Returns self.

a = Deque{1, 6, 2, 4, 8}
a.reject! { |x| x > 3 }
a # => Deque{1, 2}

See also: Deque#reject.

Source
reject!(pattern) : self

Modifies self, deleting the elements in the collection for which pattern === element.

a = Deque{1, 6, 2, 4, 8}
a.reject!(3..7)
a # => Deque{1, 2, 8}

See also: Deque#reject.

Source
rotate!(n : Int = 1) : Nil

Shifts all elements of self to the left n times. Returns self.

a1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a3 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

a1.rotate!
a2.rotate!(1)
a3.rotate!(3)

a1 # => [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
a2 # => [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
a3 # => [3, 4, 5, 6, 7, 8, 9, 0, 1, 2]
Source
select!

Modifies self, keeping only the elements in the collection for which the passed block is truthy. Returns self.

a = Deque{1, 6, 2, 4, 8}
a.select! { |x| x > 3 }
a # => Deque{6, 4, 8}

See also: Deque#select.

Source
select!(pattern) : self

Modifies self, keeping only the elements in the collection for which pattern === element.

ary = [1, 6, 2, 4, 8]
ary.select!(3..7)
ary # => [6, 4]

See also: Deque#select.

Source
shift(n : Int) : Nil

Removes the first n (at most) items in the deque.

Source
shift

Removes and returns the first item. Raises IndexError if empty.

a = Deque{1, 2, 3}
a.shift # => 1
a       # => Deque{2, 3}
Source
shift

Removes and returns the first item, if not empty, otherwise executes the given block and returns its value.

Source
shift?

Removes and returns the first item, if not empty, otherwise nil.

Source
size

Returns the number of elements in the deque.

Deque{:foo, :bar}.size # => 2
Source
to_json(json : JSON::Builder) : Nil
Source
to_s(io : IO) : Nil

Appends a short String representation of this object which includes its class name and its object address.

class Person
  def initialize(@name : String, @age : Int32)
  end
end

Person.new("John", 32).to_s # => #<Person:0x10a199f20>
Source
unsafe_fetch(index : Int) : T

Returns the element at the given index, without doing any bounds check.

Indexable makes sure to invoke this method with index in 0...size, so converting negative indices to positive ones is not needed here.

Clients never invoke this method directly. Instead, they access elements with #[](index) and #[]?(index).

This method should only be directly invoked if you are absolutely sure the index is in bounds, to avoid a bounds check for a small boost of performance.

Source
unsafe_put(index : Int, value : T)

Sets the element at the given index to value, without doing any bounds check.

Indexable::Mutable makes sure to invoke this method with index in 0...size, so converting negative indices to positive ones is not needed here.

Clients never invoke this method directly. Instead, they modify elements with #[]=(index, value).

This method should only be directly invoked if you are absolutely sure the index is in bounds, to avoid a bounds check for a small boost of performance.

Source
unshift(value : T) : self

Adds an item to the beginning of the deque.

a = Deque{1, 2}
a.unshift 0 # => Deque{0, 1, 2}
Source