Class: Alimento::List
- Inherits:
-
Object
- Object
- Alimento::List
- Includes:
- Enumerable
- Defined in:
- lib/alimento/fuente.rb
Overview
Esta clase permite crear listas doblemente enlazadas. El objetivo es que cada lista represente un grupo de alimentos y cada alimento, un nodo de la lista. Se incluye el mixin Enumerable para poder usar métodos de dicho módulo
Defined Under Namespace
Classes: Node
Instance Attribute Summary collapse
-
#head ⇒ Object
readonly
“Apuntadores”: cola y cabeza de la lista.
-
#tail ⇒ Object
readonly
“Apuntadores”: cola y cabeza de la lista.
Instance Method Summary collapse
-
#each {|puntero.valor| ... } ⇒ Object
Método necesario para usar ‘Enumerable’.
-
#initialize ⇒ List
constructor
Establece valores por defecto de la cola y cabeza de la lista.
-
#insertaNodo(*arg) ⇒ Object
Inserta uno ó varios nodos a la lista.
-
#rmHead ⇒ Object
Remove-Head: Elimina el nodo-cabeza de la lista.
-
#rmTail ⇒ Object
Remove Tail: Elimina el nodo-cola de la lista.
-
#table ⇒ Object
Presenta los alimentos de la lista en un array.
-
#to_each ⇒ Object
Método ‘each’ que obtiene una tabla ordenada de alimentos ordenados por calorías.
-
#to_for ⇒ Object
Ordena los alimentos por calorías mediante bucle ‘FOR’.
-
#to_sort ⇒ Object
Método ‘sort’ que obtiene una tabla ordenada de alimentos ordenados por calorías.
Constructor Details
#initialize ⇒ List
Establece valores por defecto de la cola y cabeza de la lista
72 73 74 75 |
# File 'lib/alimento/fuente.rb', line 72 def initialize @head= nil #cabeza de lista @tail= nil #cola de lista end |
Instance Attribute Details
#head ⇒ Object (readonly)
“Apuntadores”: cola y cabeza de la lista.
57 58 59 |
# File 'lib/alimento/fuente.rb', line 57 def head @head end |
#tail ⇒ Object (readonly)
“Apuntadores”: cola y cabeza de la lista.
57 58 59 |
# File 'lib/alimento/fuente.rb', line 57 def tail @tail end |
Instance Method Details
#each {|puntero.valor| ... } ⇒ Object
Método necesario para usar ‘Enumerable’
61 62 63 64 65 66 67 68 |
# File 'lib/alimento/fuente.rb', line 61 def each puntero=@tail while puntero != @head yield puntero.valor puntero=puntero.sigte end yield puntero.valor end |
#insertaNodo(*arg) ⇒ Object
Inserta uno ó varios nodos a la lista. Se introducen tantos nodos a la listacomo argumentos le pasamos al método.
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/alimento/fuente.rb', line 80 def insertaNodo(*arg) i=0 while i< arg.size nodo=Node.new(arg[i]) if @head== nil @head= nodo @tail= nodo else nodo.prev= @head @head.sigte= nodo @head= nodo end i=i+1 end end |
#rmHead ⇒ Object
Remove-Head: Elimina el nodo-cabeza de la lista
97 98 99 100 101 102 103 104 |
# File 'lib/alimento/fuente.rb', line 97 def rmHead if @head.prev!=nil @head=@head.prev @head.sigte=nil elsif @head.valor!=nil @tail=@head=nil end end |
#rmTail ⇒ Object
Remove Tail: Elimina el nodo-cola de la lista
107 108 109 110 111 112 113 114 |
# File 'lib/alimento/fuente.rb', line 107 def rmTail if @tail.sigte!=nil @tail=@tail.sigte @tail.prev=nil elsif @tail.valor!=nil @head=@tail=nil end end |
#table ⇒ Object
Presenta los alimentos de la lista en un array
117 118 119 |
# File 'lib/alimento/fuente.rb', line 117 def table self.map{|i| [i.nombre, i.proteinas, i.glucidos, i.lipidos, i.calorias]} end |
#to_each ⇒ Object
Método ‘each’ que obtiene una tabla ordenada de alimentos ordenados por calorías
148 149 150 151 152 |
# File 'lib/alimento/fuente.rb', line 148 def to_each vector=[] self.table.each{|item| inserta(vector,item)} vector end |
#to_for ⇒ Object
Ordena los alimentos por calorías mediante bucle ‘FOR’
123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/alimento/fuente.rb', line 123 def to_for v=self.table ordenado = false until ordenado ordenado = true for i in 0..(v.length - 2) if v[i][4] > v[i + 1][4] ordenado = false v[i], v[i + 1] = v[i + 1], v[i] end end end return v end |
#to_sort ⇒ Object
Método ‘sort’ que obtiene una tabla ordenada de alimentos ordenados por calorías
156 157 158 |
# File 'lib/alimento/fuente.rb', line 156 def to_sort self.table.sort_by{|i| i[4]} end |