Class: Lista
Overview
Es una abstración de una lista doblemente enlazada, es decir se puede recorrer en ambos
sentidos. En otras palabras, se puede ver como una aproximación de array.
Tiene un puntero a cada extremo de la lista:
* Puntero al nodo cabeza
* Puntero al nodo cola
Instance Attribute Summary collapse
-
#head ⇒ Object
readonly
Returns the value of attribute head.
-
#tail ⇒ Object
readonly
Returns the value of attribute tail.
Instance Method Summary collapse
-
#==(other) ⇒ Object
Dos listas son iguales si tienen exactamente los mismos elementos y en el mismo orden.
-
#at(pos) ⇒ Object
Accede a un elemento dada la posición.
-
#cantNodos ⇒ Object
Devuelve la cantidad de elementos.
-
#each ⇒ Object
Implementación del método each para utilizar los demás métodos del módulo enumerable.
-
#getGeiAnual ⇒ Object
Retorna los gases de efecto invernadero producidos en un año.
-
#getGeiDiario ⇒ Object
Retorna los gases de efecto invernadero producidos en un día.
-
#getProcentajeCarbohidratos ⇒ Object
Retorna en porcenataje el aporte de carbohidratos en el valor energético.
-
#getProcentajeLipidos ⇒ Object
Retorna en porcenataje el aporte de lípidos en el valor energético.
-
#getProcentajeProteinas ⇒ Object
Retorna en porcenataje el aporte de proteinas en el valor energético.
-
#getTerrenoTotal ⇒ Object
Retorna el uso de terreno en un año.
-
#initialize(head = nil, tail = nil, arrayElementos = nil) ⇒ Lista
constructor
A new instance of Lista.
-
#isVacia ⇒ Object
Retorna verdadero si la lista está vacia, en otro caso retorna falso.
-
#pop ⇒ Object
Extae el último elemento.
-
#push(elemento) ⇒ Object
Inserta un elemento por la cola.
-
#pushAll(arrayElementos) ⇒ Object
Inserta varios elementos por la cola.
-
#shift ⇒ Object
Extae el primer elemento.
-
#to_s ⇒ Object
Retorna la Lista formateada.
-
#unshift(elemento) ⇒ Object
Inserta un elemento por la cabeza.
Constructor Details
#initialize(head = nil, tail = nil, arrayElementos = nil) ⇒ Lista
Returns a new instance of Lista.
14 15 16 17 18 19 20 21 |
# File 'lib/huella/lista.rb', line 14 def initialize(head = nil, tail = nil, arrayElementos = nil) @head = head @tail = tail if(arrayElementos != nil) self.pushAll(arrayElementos) end end |
Instance Attribute Details
#head ⇒ Object (readonly)
Returns the value of attribute head.
12 13 14 |
# File 'lib/huella/lista.rb', line 12 def head @head end |
#tail ⇒ Object (readonly)
Returns the value of attribute tail.
12 13 14 |
# File 'lib/huella/lista.rb', line 12 def tail @tail end |
Instance Method Details
#==(other) ⇒ Object
Dos listas son iguales si tienen exactamente los mismos elementos y en el mismo orden
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/huella/lista.rb', line 125 def ==(other) if(self.cantNodos != other.cantNodos) return false else self.each_with_index do |elemento, index| if(elemento != other.at(index)) return false end end end return true end |
#at(pos) ⇒ Object
Accede a un elemento dada la posición
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/huella/lista.rb', line 108 def at(pos) temp = nil #En caso de que no exista la posición, se devuelve el valor nil self.each_with_index do |elemento, index| if(index == pos) temp = elemento break end end temp end |
#cantNodos ⇒ Object
Devuelve la cantidad de elementos
151 152 153 154 155 156 157 158 159 160 161 162 |
# File 'lib/huella/lista.rb', line 151 def cantNodos total = 0 temp = @head while(temp != nil) temp = temp.next total += 1 end total end |
#each ⇒ Object
Implementación del método each para utilizar los demás métodos del módulo enumerable
264 265 266 267 268 269 270 271 272 273 |
# File 'lib/huella/lista.rb', line 264 def each temp = @head while(temp != nil) yield temp.value temp = temp.next end end |
#getGeiAnual ⇒ Object
Retorna los gases de efecto invernadero producidos en un año
231 232 233 |
# File 'lib/huella/lista.rb', line 231 def getGeiAnual (getGeiDiario * 365).round(2) end |
#getGeiDiario ⇒ Object
Retorna los gases de efecto invernadero producidos en un día
216 217 218 219 220 221 222 223 224 225 226 227 228 |
# File 'lib/huella/lista.rb', line 216 def getGeiDiario totalGei = 0 temp = @head while(temp != nil) totalGei += temp.value.gei temp = temp.next end totalGei.round(2) end |
#getProcentajeCarbohidratos ⇒ Object
Retorna en porcenataje el aporte de carbohidratos en el valor energético
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
# File 'lib/huella/lista.rb', line 182 def getProcentajeCarbohidratos totalCarbohidratos = 0 totalValorEnergetico = 0 temp = @head while(temp != nil) totalCarbohidratos += temp.value.carbohidratos totalValorEnergetico += temp.value.getValorEnergetico temp = temp.next end ( (totalCarbohidratos * 100 * 4) / totalValorEnergetico ).round(2) end |
#getProcentajeLipidos ⇒ Object
Retorna en porcenataje el aporte de lípidos en el valor energético
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 |
# File 'lib/huella/lista.rb', line 199 def getProcentajeLipidos totalLipidos = 0 totalValorEnergetico = 0 temp = @head while(temp != nil) totalLipidos += temp.value.lipidos totalValorEnergetico += temp.value.getValorEnergetico temp = temp.next end ( (totalLipidos * 100 * 9) / totalValorEnergetico ).round(2) end |
#getProcentajeProteinas ⇒ Object
Retorna en porcenataje el aporte de proteinas en el valor energético
165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 |
# File 'lib/huella/lista.rb', line 165 def getProcentajeProteinas totalProteinas = 0 totalValorEnergetico = 0 temp = @head while(temp != nil) totalProteinas += temp.value.proteinas totalValorEnergetico += temp.value.getValorEnergetico temp = temp.next end ( (totalProteinas * 100 * 4) / totalValorEnergetico ).round(2) end |
#getTerrenoTotal ⇒ Object
Retorna el uso de terreno en un año
236 237 238 239 240 241 242 243 244 245 246 247 248 |
# File 'lib/huella/lista.rb', line 236 def getTerrenoTotal totalTerreno = 0 temp = @head while(temp != nil) totalTerreno += temp.value.terreno temp = temp.next end totalTerreno.round(2) end |
#isVacia ⇒ Object
Retorna verdadero si la lista está vacia, en otro caso retorna falso
142 143 144 145 146 147 148 |
# File 'lib/huella/lista.rb', line 142 def isVacia if(cantNodos == 0) return true end return false end |
#pop ⇒ Object
Extae el último elemento
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/huella/lista.rb', line 68 def pop oldTail = @tail #Existen mínimo 2 nodos if( (@head != nil) && (@head.next != nil) ) @tail = @tail.prev @tail.next=(nil) oldTail.prev=(nil) #Existe un solo nodo o ninguno else @head = nil @tail = nil end oldTail end |
#push(elemento) ⇒ Object
Inserta un elemento por la cola
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/huella/lista.rb', line 24 def push (elemento) nodoNuevo = Nodo.new(elemento) #La lista está vacia if(@head == nil) @head = nodoNuevo else #Agrega el nuevo nodo al final de una lista no vacia @tail.next=(nodoNuevo) nodoNuevo.prev=(@tail) end #Actualiza la cola @tail = nodoNuevo end |
#pushAll(arrayElementos) ⇒ Object
Inserta varios elementos por la cola
42 43 44 45 46 |
# File 'lib/huella/lista.rb', line 42 def pushAll(arrayElementos) arrayElementos.each do |elemento| push(elemento) end end |
#shift ⇒ Object
Extae el primer elemento
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/huella/lista.rb', line 88 def shift oldHead = @head #Existen mínimo 2 nodos if( (@head != nil) && (@head.next != nil) ) @head = @head.next @head.prev=(nil) oldHead.next=(nil) #Existe un solo nodo o ninguno else @head = nil @tail = nil end oldHead end |
#to_s ⇒ Object
Retorna la Lista formateada
251 252 253 254 255 256 257 258 259 260 261 |
# File 'lib/huella/lista.rb', line 251 def to_s salida = [] self.each do |elemento| salida << elemento end "[" + salida.join(" <-> ") + "]" end |
#unshift(elemento) ⇒ Object
Inserta un elemento por la cabeza
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/huella/lista.rb', line 49 def unshift (elemento) nodoNuevo = Nodo.new(elemento) #La lista está vacia if(@head == nil) @tail = nodoNuevo else #Agrega el nuevo nodo al principio de una lista no vacia nodoNuevo.next=(@head) @head.prev=(nodoNuevo) end #Actualiza la cabeza @head = nodoNuevo end |