martes, 3 de julio de 2012

Listas

 Esto es una lista dinámica. La diferencia entre una lista y un array es que la lista puede aumentar de items y en cambio un array tiene un número de items prefijados.
Los metodos que aquí se expresan son:
.add  .insert y remove_at cuyo funcionamiento es sencillo.

Se puede asignar un valor a una posición como lista[2]="10"
o imprimir un valor de la lista.
Para recorrer la lista podemos hacer un foreach de vala. For i in lista. Que quiere decir que metá de uno en uno todos los valores de la lista en i.

$ valac --pkg gee-1.0 listas.gs

Hasta otra.

[indent=4] i:string init var lista = new list of string lista.add ("1"); lista.add ("2"); lista.add ("5"); lista.add ("4"); lista.insert (2, "3"); lista.remove_at (3) for i in lista print i lista[2] = "10" stdout.printf ("%s\n", lista[2])


11 comentarios:

  1. buen dia, ya he probado compilar para las listas pero no lo consigo estoy en opensuse ya instale la libreria libgee-devel pero no reconoce la libreria asi como esta aqui ¿podrias ayudarme en eso?

    ResponderEliminar
    Respuestas
    1. Tengo instalado: libgee0.8-dev libgee-0.8-2 gir-1.2-gee-0.8.

      La verdad es que ya no uso la versión 1.0 de libgee esta mas avanzada la 0.8. Intentalo con estos paquetes o parecidos en tu distribución.

      Eliminar
    2. Hola Homar: prueba a usar --pkg gee 0.8

      Eliminar
  2. no me ha funcionado amigo la libreria gir no la encuentro siempre me sale el mismo error
    error: Package `libgee-0.8' not found in specified Vala API directories or GObject-Introspection GIR directories
    Compilation failed: 1 error(s), 0 warning(s)
    este lenguaje me parece interesante pero si que me la esta poniendo dificil.

    ResponderEliminar
    Respuestas
    1. Podrías escribirme cual es el comando de compilación que usas?
      Un saludo.

      Eliminar
    2. bueno amigo disculpa la tardanza estaba algo ocupado pero primero aqui puedes ver lo que tengo instalado de las librerias
      E | Nombre | Resumen | Tipo
      --+----------------+--------------------------------------------------+---------
      i | libgee-0_8-2 | GObject-based library providing commonly used -> | paquete
      i | libgee-devel | GObject-based library providing useful data st-> | paquete
      | libgee06-devel | GObject-based library providing useful data st-> | paquete
      | libgee2 | GObject-based library providing commonly used -> | paquete

      cuando hago la compilacion como dijiste

      valac --pkg gee 0.8 listas2.gs
      error: Package `gee' not found in specified Vala API directories or GObject-Introspection GIR directories
      Compilation failed: 1 error(s), 0 warning(s)

      valac --pkg libgee-0_8-2 listas2.gs // con el mismo error
      valac --pkg libgee-devel listas2.gs

      esos serian de los que he probado ya no se cual usar.

      Eliminar
    3. como que no se ve muy claro pero ya no pude editar el comentario para dejar espacio pero tengo instalado la libgee-0_8-2 y la libgee-devel

      Eliminar
  3. Por ahora lo que puedo ver es que te falta un guión. Es decir "valac --pkg gee-0.8 listas2.gs"

    Por otro lado no se si será necesario el paquete gir-1.2-gee-0.8. No lo puedes instalar?
    No se si te valdrán los de esta página....
    http://rpmfind.net/linux/rpm2html/search.php?query=typelib%28Gee%29

    ResponderEliminar
  4. probé este ejemplo que tienes aqui y lo hice y me dio varias advertencias pero si funcionó no instalé el gir porque en el link que me diste no se cual será hay un monton y no hay algo que se parezca al gir realmente no sé cual usar asi que solo lo probé
    y medio esto
    /home/h/Documents/listas2.vala.c: In function ‘_vala_main’:
    /home/h/Documents/listas2.vala.c:72:3: warning: passing argument 1 of ‘gee_abstract_collection_get_size’ from incompatible pointer type [enabled by default]
    _tmp12_ = gee_abstract_collection_get_size ((GeeCollection*) _tmp11_);
    ^
    In file included from /home/h/Documents/listas2.vala.c:9:0:
    /usr/include/gee-0.8/gee.h:1431:6: note: expected ‘struct GeeAbstractCollection *’ but argument is of type ‘struct GeeCollection *’
    gint gee_abstract_collection_get_size (GeeAbstractCollection* self);
    ^
    /home/h/Documents/listas2.vala.c: In function ‘main’:
    /home/h/Documents/listas2.vala.c:115:2: warning: ‘g_type_init’ is deprecated (declared at /usr/include/glib-2.0/gobject/gtype.h:669) [-Wdeprecated-declarations]
    g_type_init ();

    ResponderEliminar
  5. Todo correcto Homar!!
    en vez de usar "for i in lista" usa "for var i=0 to (lista.size-1) do print lista[i]" puesto que este tipo de "for" esta preparado para los arrays y no para las listas de Gee. Ya puedes programar en Genie.
    :->
    Ten en cuenta que no hace falta usar [indent=4] y luego los correspondientes espacios. Sino que puedes usar el tabulador sin introducir [indent=4].ok?

    ResponderEliminar
  6. Ahora si me quitó casi todas las advertencias gracias por todo amigo.

    ResponderEliminar