class AVLTree::SortedMultiset(T)
- AVLTree::SortedMultiset(T)
- Reference
- Object
Overview
SortedMultiset
implements a collection of sorted values with possible duplicates.
Sample
require "avltree"
mset = AVLTree::SortedMultiset(Int32).new
mset << 3 << 1 << 4 << 1 << 5 << 9
mset # => SortedMultiset{1, 1, 3, 4, 5, 9}
mset[0] # => 1
mset[1] # => 1
mset[2] # => 3 (SortedMultiset#[k] returns the kth object)
mset.lower_bound(-1) # => 0
mset.lower_bound(2) # => 2
mset.lower_bound(3) # => 2
mset.lower_bound(9) # => 5
mset.lower_bound(10) # => 6
mset.delete(1)
mset # => SortedMultiset{1, 3, 4, 5, 9}
Included Modules
- Enumerable(T)
- Indexable(T)
- Iterable(T)
Defined in:
avltree/sorted_multiset.crConstructors
Instance Method Summary
- #&(other : SortedMultiset)
- #+(other : SortedMultiset(U)) forall U
- #-(other : SortedMultiset)
- #-(other : Enumerable)
- #<<(object : T)
- #==(other : SortedMultiset)
- #===(other : T)
- #^(other : SortedMultiset(U)) forall U
- #^(other : Enumerable(U)) forall U
- #|(other : SortedMultiset(U)) forall U
- #add(object : T)
- #add?(object : T)
-
#at(index : Int)
Returns the element at the index-th.
-
#at(index : Int, &)
Returns the element at the index-th.
-
#at?(index : Int)
Like
#at
, but returnsnil
if trying to access an element outside the multiset's range. - #clear
- #clone
- #concat(elems)
-
#count(range : Range(T | Nil, T | Nil))
Returns the number of elements in the set that exist within the range
-
#count(object)
Returns the number of times that the passed item is present in the collection.
- #delete(object)
- #delete_at(object)
- #delete_at?(object)
-
#dup
Returns a shallow copy of this object.
-
#each(&)
Calls the given block once for each element in
self
, passing that element as a parameter. -
#each
Must return an
Iterator
over the elements in this collection. -
#empty?
Returns
true
ifself
is empty,false
otherwise. -
#fetch(index : Int, &)
Returns the element at the given index, if in bounds, otherwise executes the given block with the index and returns its value.
- #fetch(index : Int, default)
-
#first
Returns the first element in the collection.
-
#first?
Returns the first element in the collection.
-
#hash(hasher)
See
Object#hash(hasher)
-
#includes?(object)
Returns
true
if the collection contains obj,false
otherwise. -
#index(object)
Returns the index of the first appearance of object in
self
starting from the given offset, ornil
if object is not inself
. -
#index!(object)
Returns the index of the first appearance of obj in
self
starting from the given offset. - #index_of_largest_leq(object) : Int32 | Nil
- #index_of_largest_lt(object) : Int32 | Nil
- #index_of_smallest_geq(object) : Int32 | Nil
- #index_of_smallest_gt(object) : Int32 | Nil
-
#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.
- #intersects?(other : SortedMultiset)
- #largest_leq(object) : T | Nil
- #largest_leq_with_index(object) : Tuple(T | Nil, Int32 | Nil)
- #largest_lt(object) : T | Nil
- #largest_lt_with_index(object) : Tuple(T | Nil, Int32 | Nil)
-
#last
Returns the last element of
self
if it's not empty, or raisesIndexError
. -
#last?
Returns the last element of
self
if it's not empty, ornil
. - #lower_bound(object) : Int32
-
#max
Returns the element with the maximum value in the collection.
-
#max?
Like
#max
but returnsnil
if the collection is empty. -
#min
Returns the element with the minimum value in the collection.
-
#min?
Like
#min
but returnsnil
if the collection is empty. -
#object_id
Returns a
UInt64
that uniquely identifies this object. - #pop : T
- #pop(&)
- #pop? : T | Nil
- #pretty_print(pp) : Nil
- #proper_subset_of?(other : SortedMultiset)
- #proper_superset?(other : SortedMultiset)
-
#rindex(object)
Returns the index of the last appearance of value in
self
, ornil
if the value is not inself
. -
#rindex!(object)
Returns the index of the last appearance of value in
self
, ornil
if the value is not inself
. -
#same?(other : SortedMultiset)
Returns
true
if this reference is the same as other. - #shift : T
- #shift(&)
- #shift? : T | Nil
-
#size
Returns the number of elements in this container.
- #smallest_geq(object) : T | Nil
- #smallest_geq_with_index(object) : Tuple(T | Nil, Int32 | Nil)
- #smallest_gt(object) : T | Nil
- #smallest_gt_with_index(object) : Tuple(T | Nil, Int32 | Nil)
- #subset_of?(other : SortedMultiset)
- #subtract(other : Enumerable)
- #superset_of?(other : SortedMultiset)
-
#to_a
Returns an
Array
with all the elements in the collection. -
#to_s(io : IO) : Nil
Appends a short String representation of this object which includes its class name and its object address.
- #unordered_each(&)
-
#unsafe_fetch(index : Int)
Returns the element at the given index, without doing any bounds check.
- #upper_bound(object) : Int32
Instance methods inherited from module Enumerable(T)
to_sorted_multiset
to_sorted_multiset,
to_sorted_set
to_sorted_set
Instance methods inherited from module Enumerable(T)
to_sorted_multiset
to_sorted_multiset,
to_sorted_set
to_sorted_set
Constructor Detail
Instance Method Detail
Like #at
, but returns nil
if trying to access an element outside the multiset's range.
Returns the number of elements in the set that exist within the range
set = AVLTree::SortedSet(Int32){3, 1, 4, 1, 5, 9}
set.count(0..1).should eq 2
set.count(0...1).should eq 0
set.count(0..2).should eq 2
set.count(0...2).should eq 2
set.count(2..3).should eq 1
set.count(2...3).should eq 0
set.count(2..9).should eq 4
set.count(2...9).should eq 3
set.count(2...).should eq 4
set.count(...).should eq 6
set.count(...9).should eq 5
Returns the number of times that the passed item is present in the collection.
[1, 2, 3, 4].count(3) # => 1
Returns a shallow copy of this object.
This allocates a new object and copies the contents of
self
into it.
Calls the given block once for each element in self
, passing that
element as a parameter.
a = ["a", "b", "c"]
a.each { |x| print x, " -- " }
produces:
a -- b -- c --
Must return an Iterator
over the elements in this collection.
Returns true
if self
is empty, false
otherwise.
([] of Int32).empty? # => true
([1]).empty? # => false
Returns the element at the given index, if in bounds, otherwise executes the given block with the index and returns its value.
a = [:foo, :bar]
a.fetch(0) { :default_value } # => :foo
a.fetch(2) { :default_value } # => :default_value
a.fetch(2) { |index| index * 3 } # => 6
Returns the first element in the collection. Raises Enumerable::EmptyError
if the collection is empty.
([1, 2, 3]).first # => 1
([] of Int32).first # raises Enumerable::EmptyError
Returns the first element in the collection.
When the collection is empty, returns nil
.
([1, 2, 3]).first? # => 1
([] of Int32).first? # => nil
Returns true
if the collection contains obj, false
otherwise.
[1, 2, 3].includes?(2) # => true
[1, 2, 3].includes?(5) # => false
Returns the index of the first appearance of object in self
starting from the given offset, or nil
if object is not in self
.
[1, 2, 3, 1, 2, 3].index(2, offset: 2) # => 4
Returns the index of the first appearance of obj in self
starting from the given offset. Raises Enumerable::NotFoundError
if
obj is not in self
.
[1, 2, 3, 1, 2, 3].index!(2, offset: 2) # => 4
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>
Returns the last element of self
if it's not empty, or raises IndexError
.
([1, 2, 3]).last # => 3
([] of Int32).last # raises IndexError
Returns the last element of self
if it's not empty, or nil
.
([1, 2, 3]).last? # => 3
([] of Int32).last? # => nil
Returns the element with the maximum value in the collection.
It compares using >
so it will work for any type that supports that method.
[1, 2, 3].max # => 3
["Alice", "Bob"].max # => "Bob"
Raises Enumerable::EmptyError
if the collection is empty.
Like #max
but returns nil
if the collection is empty.
Returns the element with the minimum value in the collection.
It compares using <
so it will work for any type that supports that method.
[1, 2, 3].min # => 1
["Alice", "Bob"].min # => "Alice"
Raises Enumerable::EmptyError
if the collection is empty.
Like #min
but returns nil
if the collection is empty.
Returns a UInt64
that uniquely identifies this object.
The returned value is the memory address of this object.
string = "hello"
string.object_id # => 4460249568
pointer = Pointer(String).new(string.object_id)
string2 = pointer.as(String)
string2.object_id == string.object_id # => true
Returns the index of the last appearance of value in self
, or
nil
if the value is not in self
.
If offset is given, it defines the position to end the search (elements beyond this point are ignored).
[1, 2, 3, 2, 3].rindex(2) # => 3
[1, 2, 3, 2, 3].rindex(2, offset: 2) # => 1
Returns the index of the last appearance of value in self
, or
nil
if the value is not in self
.
If offset is given, it defines the position to end the search (elements beyond this point are ignored).
[1, 2, 3, 2, 3].rindex(2) # => 3
[1, 2, 3, 2, 3].rindex(2, offset: 2) # => 1
Raises Enumerable::NotFoundError
if value is not in self
.
Returns true
if this reference is the same as other. This is only
true
if this reference's #object_id
is the same as other's.
Returns the number of elements in this container.
Returns an Array
with all the elements in the collection.
{1, 2, 3}.to_a # => [1, 2, 3]
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>
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.