elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Duda para ordenar arreglos en Ruby.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda para ordenar arreglos en Ruby.  (Leído 4,070 veces)
Saito_25

Desconectado Desconectado

Mensajes: 83


Ver Perfil
Duda para ordenar arreglos en Ruby.
« en: 29 Marzo 2015, 01:10 am »

Bueno, estoy siguiendo uno de los tutoriales que me dejó un usuario en está página, pero me tiene un poco confuso la parte en la que estoy, y por poco me refiero a mucho.

Estoy en esta parte: http://www.codecademy.com/es/courses/ruby-beginner-en-F7psT/3/4?curriculum_id=5106fd5d36edd4ef76000149

Bueno, no tengo ni idea de qué hacer para ordenar el array descendentemente de la forma en la que me lo pide el ejercicio... lo mas gracioso es que la forma que se me ocurre es más fácil... que es simplemente poner "libros.sort!.reverse!" Hace lo mismo, y mucho más sencillo, al menos eso creo.

Espero vuestra ayuda, gracias


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Duda para ordenar arreglos en Ruby.
« Respuesta #1 en: 29 Marzo 2015, 01:40 am »

realmente no se ruby... pero lo que el usuario me parece que hace ahí es un ordenamiento personalizado, solo que lo usa en su modo más simple que es inversión... pero cuando quieras ordenar algo de manera poco común, el es tu solución


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Duda para ordenar arreglos en Ruby.
« Respuesta #2 en: 29 Marzo 2015, 10:14 am »

La solución es:
Código
  1. libros.sort! {
  2.    |primerLibro, segundoLibro|
  3.    segundoLibro <=> primerLibro
  4. }

La solución que pensaste sobre hacerle un reversal (inversión) a la colección también sería válida fuera del ejercicio,
pero supongo que el ejercicio no lo puede tomar por válido ya que obviamente la intención del ejercicio es demostrar la implementación de un bloque de código que compare entre A y B, devolviendo -1, 0, o +1,
vamos, que en mi opinión los algoritmos de validación de Code Academy no parecen permitir mucho "libre albedrio".

PD: Formula futuras preguntas sobre Ruby en el foro de Scripting.

Saludos
« Última modificación: 29 Marzo 2015, 11:08 am por Eleкtro » En línea

Saito_25

Desconectado Desconectado

Mensajes: 83


Ver Perfil
Re: Duda para ordenar arreglos en Ruby.
« Respuesta #3 en: 29 Marzo 2015, 12:37 pm »

Siento las molestia causadas. A partir de ahora, hago las preguntas en este foro.

Supuse que lo que yo hice también era válido, y me estaba rallando bastante la fórmula que me daban ellos, o mejor dicho, el cómo pedían que lo hicieran.

Sigo sin entender muy bien ese código, por no decir que, además de saber que ordena, no tengo ni idea de cómo. Tampoco sé si hay alguna diferencia entre el código mío y ese, si cambiará en algo el resultado a corto o largo plazo.

A ver si me podéis ayudar un poco más. Gracias.
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Duda para ordenar arreglos en Ruby.
« Respuesta #4 en: 29 Marzo 2015, 14:04 pm »

Tampoco sé si hay alguna diferencia entre el código mío y ese, si cambiará en algo el resultado a corto o largo plazo.

La diferencia deberias tenerla clara ya que el propio nombre de las funciones Reverse y Sort indican su funcionalidad:

Reverse invierte el orden de los elementos de la secuencia.
Sort ordena los elementos de la secuencia, según el resultado de una evaluación entre los elementos.

En el código de Code Academy la colección ya te la dan ordenada de manera ascendente:
Citar
Código
  1. libros.sort! { |primerLibro, segundoLibro| primerLibro <=> segundoLibro }

Entonces, si le haces un Reverse lo que estás haciendo es invertir el orden de Ascendente a Descendente, por ese motivo y en este caso específico la solución de usar Reverse sería perfectamente aplicable, sólo que Code Academy no acepta esa solución por el motivo que sea (el motivo podría ser lo que ya epxliqué en mi comentario anterior).

Sigo sin entender muy bien ese código.

El operador <=> toma dos objetos, A y B, los compara y devuelve -1, 0, o 1:

Si A es mayor que B, devolverá -1
Si B es mayor que A, devolverá 1
Si A y B son iguales, devolverá 0

El algoritmo de ordenación utiliza el resultado de esa evaluación para determinar en que posición de la colección deben ir los elementos:

Si el resultado de la evaluación es -1, A debe posicionarse despues de B.
Si el resultado de la evaluación es 1, B debe posicionarse despues de A.
Si el resultado de la evaluación es 0, no importa le orden.

Slaudos



EDITO:

He escrito este ejemplo por si te ayuda a entenderlo mejor utilizando un bloque de código para una evaluación personalizada:

Código
  1. # -*- coding: WINDOWS-1252 -*-
  2.  
  3. col = [ "d", "a", "e", "c", "b" ]
  4.  
  5. ascendantCol =
  6. col.sort {
  7.    |a, b|  
  8.    case
  9.        when a > b
  10.            +1
  11.        when b > a
  12.            -1
  13.        else
  14.            0
  15.    end
  16. }
  17.  
  18. descendantCol =
  19. col.sort {
  20.    |a, b|  
  21.    case
  22.        when a > b
  23.            -1
  24.        when b > a
  25.            +1
  26.        else
  27.            0
  28.    end
  29. }
  30.  
  31. print "Ascendant : #{ ascendantCol.join(', ')}\n"
  32. print "Descendant: #{descendantCol.join(', ')}\n"
  33.  
  34. __END__

Saludos
« Última modificación: 29 Marzo 2015, 14:59 pm por Eleкtro » En línea

Saito_25

Desconectado Desconectado

Mensajes: 83


Ver Perfil
Re: Duda para ordenar arreglos en Ruby.
« Respuesta #5 en: 29 Marzo 2015, 15:54 pm »

Ahora sí, mucho más claro.  :D.

Tenía algunas dudas por cómo era el patrón por el cuál se guiaba el método para ordenar, ya me la solucionaste, thank you so much.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
duda con arreglos
Java
droidZ 2 1,718 Último mensaje 24 Septiembre 2013, 19:16 pm
por droidZ
¿Una manera distinta de ordenar arreglos/vectores.-?
Programación C/C++
DanielPy 0 1,416 Último mensaje 3 Diciembre 2013, 21:03 pm
por DanielPy
MOVIDO: Duda para ordenar arreglos en Ruby.
Programación General
Eleкtro 0 1,421 Último mensaje 29 Marzo 2015, 10:14 am
por Eleкtro
ordenar arreglos
Programación C/C++
openclasroom 2 2,051 Último mensaje 24 Octubre 2017, 16:18 pm
por Serapis
Ordenar arreglos numpy simultáneamente en Python
Scripting
Yuli 1 1,435 Último mensaje 17 Noviembre 2018, 18:34 pm
por tincopasan
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines