Ferrer Pérez, Eduardo & 9'6\\ García García, Laura & 7'5 \\ García Medina, Anai & 6'5\\ García Rodríguez, Pedro & 7'2\\ González del Castillo, Jorge & 5'0\\ Hernández Pérez, Daniel & 5'0\\ Marrero Díaz, Jose Antonio & 8'0\\ Marrero Piñero, Sergio & 7'2\\ Padrón Padrón, Adolfo & 5'0\\ Pedrín Ruiz, Ana & 9'6\\ Pedrínez Pérez, Ignacio & 7'5\\ Piñero Piñero, Antonio & 5'3\\ Pérez García, Adolfo & 9'5\\ Pérez González, Germán & 5'0\\ Pérez Pedrínez, Maria & 5'0\\ Ramos Ramos, Ignacio & 5'0\\ Rodríguez González, Andrés & 10'0\\ Rodríguez Rodríguez, Jorge & 9'2\\Se pide escribir un programa que muestre el listado de alumnos ordenados en orden decreciente de calificaciones.
Sugerencias:
readlines:
>> f = File.open('notas')
=> #<File:notas>
>> x = f.readlines
=> ["Ferrer P\303\251rez, Eduardo & 9'6\\\\\n", ... , "Rodr\303\255guez Rodr\303\255guez, Jorge & 9'2\\\\\n"]
>> puts x[-1]
Rodríguez Rodríguez, Jorge & 9'2\\
=> nil
>> y = x.map { |alu| alu =~ /(.*)\s+\&\s+(\d+'\d*)/; [$1, $2] }
=> [["Ferrer P\303\251rez, Eduardo", "9'6"], ... , ["Rodr\303\255guez Rodr\303\255guez, Jorge", "9'2"]]
>> puts y[-1]
Rodríguez Rodríguez, Jorge
9'2
>> h = Hash[*y.flatten]
=> {"Pedr\303\255nez P\303\251rez, Ignacio"=>"7'5", ... , "Marrero Pi\303\261ero, Sergio"=>"7'2"}
>> h.keys
=> ["Pedr\303\255nez P\303\251rez, Ignacio", ... , "Marrero Pi\303\261ero, Sergio"]
>> h["Pedr\303\255nez P\303\251rez, Ignacio"]
=> "7'5"
>> "7'5".gsub(/(\d+)'(\d*)/, '\1.\2') => "7.5" >> "7".gsub(/(\d+)'(\d*)/, '\1.\2') => "7"
irb(main):005:0> h = {'a' => 3, 'b' =>2, 'c' => 1}
=> {"a"=>3, "b"=>2, "c"=>1}
irb(main):008:0> h.sort
=> [["a", 3], ["b", 2], ["c", 1]]
Se puede pasar un bloque a sort. El bloque recibe los dos elementos
a comparar. Los elementos son parejas clave-valor:
irb(main):006:0> h.sort { |a,b| a[0] <=> b[0] }
=> [["a", 3], ["b", 2], ["c", 1]]
irb(main):007:0> h.sort { |a,b| a[1] <=> b[1] }
=> [["c", 1], ["b", 2], ["a", 3]]
Casiano Rodriguez León 2015-01-07