Class: Alimento::List

Inherits:
Object
  • Object
show all
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

Instance Method Summary collapse

Constructor Details

#initializeList

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

#headObject (readonly)

“Apuntadores”: cola y cabeza de la lista.



57
58
59
# File 'lib/alimento/fuente.rb', line 57

def head
  @head
end

#tailObject (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’

Yields:

  • (puntero.valor)


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

#rmHeadObject

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

#rmTailObject

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

#tableObject

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_eachObject

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_forObject

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_sortObject

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