Class: Daru::Index
Instance Attribute Summary collapse
-
#index_class ⇒ Object
readonly
Returns the value of attribute index_class.
-
#relation_hash ⇒ Object
readonly
Returns the value of attribute relation_hash.
-
#size ⇒ Object
readonly
Returns the value of attribute size.
Class Method Summary collapse
Instance Method Summary collapse
- #+(other) ⇒ Object
- #==(other) ⇒ Object
- #[](key) ⇒ Object
- #_dump(depth) ⇒ Object
- #dup ⇒ Object
- #each(&block) ⇒ Object
- #empty? ⇒ Boolean
- #include?(index) ⇒ Boolean
-
#initialize(index, values = nil) ⇒ Index
constructor
A new instance of Index.
- #key(value) ⇒ Object
- #map(&block) ⇒ Object
- #to_a ⇒ Object
Constructor Details
#initialize(index, values = nil) ⇒ Index
Returns a new instance of Index.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/daru/index.rb', line 20 def initialize index, values=nil @relation_hash = {} index = 0 if index.nil? index = Array.new(index) { |i| i} if index.is_a? Integer index = index.to_a if index.is_a? Daru::Index if values.nil? index.each_with_index do |n, idx| n = n.to_sym unless n.is_a?(Integer) @relation_hash[n] = idx end else raise IndexError, "Size of values : #{values.size} and index : #{index.size} do not match" if index.size != values.size values.each_with_index do |value,i| @relation_hash[index[i]] = value end end @relation_hash.freeze @size = @relation_hash.size if index[0].is_a?(Integer) @index_class = Integer else @index_class = Symbol end end |
Instance Attribute Details
#index_class ⇒ Object (readonly)
Returns the value of attribute index_class.
18 19 20 |
# File 'lib/daru/index.rb', line 18 def index_class @index_class end |
#relation_hash ⇒ Object (readonly)
Returns the value of attribute relation_hash.
14 15 16 |
# File 'lib/daru/index.rb', line 14 def relation_hash @relation_hash end |
#size ⇒ Object (readonly)
Returns the value of attribute size.
16 17 18 |
# File 'lib/daru/index.rb', line 16 def size @size end |
Class Method Details
Instance Method Details
#+(other) ⇒ Object
82 83 84 85 86 87 88 89 90 |
# File 'lib/daru/index.rb', line 82 def +(other) if other.respond_to? :relation_hash #another index object (@relation_hash.keys + other.relation_hash.keys).uniq.to_index elsif other.is_a?(Symbol) or other.is_a?(Integer) (@relation_hash.keys << other).uniq.to_index else (@relation_hash.keys + other).uniq.to_index end end |
#==(other) ⇒ Object
52 53 54 55 56 |
# File 'lib/daru/index.rb', line 52 def ==(other) return false if other.size != @size @relation_hash.keys == other.to_a and @relation_hash.values == other.relation_hash.values end |
#[](key) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/daru/index.rb', line 58 def [](key) case key when Range if key.first.is_a?(Integer) and key.last.is_a?(Integer) first = key.first last = key.last else first = @relation_hash[key.first] last = @relation_hash[key.last] end indexes = [] (first..last).each do |idx| indexes << @relation_hash.key(idx) end Daru::Index.new indexes, (first..last).to_a when Array # works only with numeric indices Daru::Index.new key.map { |k| @relation_hash.key(k) }, key else @relation_hash[key] end end |
#_dump(depth) ⇒ Object
112 113 114 |
# File 'lib/daru/index.rb', line 112 def _dump depth Marshal.dump({relation_hash: @relation_hash}) end |
#dup ⇒ Object
108 109 110 |
# File 'lib/daru/index.rb', line 108 def dup Daru::Index.new @relation_hash.keys end |
#each(&block) ⇒ Object
5 6 7 8 |
# File 'lib/daru/index.rb', line 5 def each(&block) @relation_hash.each_key(&block) self end |
#empty? ⇒ Boolean
104 105 106 |
# File 'lib/daru/index.rb', line 104 def empty? @relation_hash.empty? end |
#include?(index) ⇒ Boolean
100 101 102 |
# File 'lib/daru/index.rb', line 100 def include? index @relation_hash.has_key? index end |
#key(value) ⇒ Object
96 97 98 |
# File 'lib/daru/index.rb', line 96 def key(value) @relation_hash.keys[value] end |
#map(&block) ⇒ Object
10 11 12 |
# File 'lib/daru/index.rb', line 10 def map(&block) to_a.map(&block) end |
#to_a ⇒ Object
92 93 94 |
# File 'lib/daru/index.rb', line 92 def to_a @relation_hash.keys end |