{"id":161,"date":"2019-09-03T13:37:00","date_gmt":"2019-09-03T13:37:00","guid":{"rendered":"http:\/\/dsd.webs.upv.es\/?page_id=161"},"modified":"2025-08-06T16:32:01","modified_gmt":"2025-08-06T16:32:01","slug":"arrays-asociativos","status":"publish","type":"page","link":"https:\/\/dsd.webs.upv.es\/?page_id=161","title":{"rendered":"Arrays asociativos"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Son \u201clook-up tables\u201d y equivaldr\u00edan a los hashes de Perl <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Su sintaxis es :<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">data-type&nbsp; array-name&nbsp;\n[ index-data-type <strong>|<\/strong> * ]<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Siendo el index-data-type:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>indefinido: mediante un *, indicando que el tipo es cualquier tipo de dato integral <\/li>\n\n\n\n<li>En cualquier otro caso debe ser: <strong>string<\/strong>, <strong>int<\/strong>, <strong>integer<\/strong>,\u00a0 (un)signed packed array, or (un)packed structure <\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Ejemplo1:<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: systemverilog; title: ; notranslate\" title=\"\">\ninteger notas&#x5B;string];\n\nnotas&#x5B;&quot;Carlos&quot;] = 2;\nnotas&#x5B;&quot;Pedro&quot;] = 5;\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">Ejemplo2:<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: systemverilog; title: ; notranslate\" title=\"\">\nint lista&#x5B;*];\n\nlista&#x5B; 2&#039;d5 ] = 1;\nlista&#x5B; 16&#039;hfff0 ] = 2;\nlista&#x5B; 4&#039;b1010 ] = 3;\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">M\u00e9todos predefinidos:<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>\n  Funci\u00f3n\n  <\/td><td>\n  Par\u00e1metros\n  <\/td><td>\n  Resultado\n  <\/td><\/tr><tr><td>\n  num()\n  <\/td><td>\n  &#8211;\n  <\/td><td>\n  Devuelve\n  n\u00famero de elementos\n  <\/td><\/tr><tr><td>\n  delete()\n  <\/td><td>\n  \u00edndice\n  (por valor)\n  <\/td><td>\n  Borra\n  elemento indicado\n  <\/td><\/tr><tr><td>\n  exists()\n  <\/td><td>\n  \u00edndice\n  (por valor)\n  <\/td><td>\n  Indica\n  si el elemento existe\n  <\/td><\/tr><tr><td>\n  first()\n  <\/td><td>\n  \u00edndice\n  (por referencia)\n  <\/td><td>\n  Asocia\n  el \u00edndice del primer elemento al par\u00e1metro (devuelve cero si el array est\u00e1\n  vac\u00edo)\n  <\/td><\/tr><tr><td>\n  last()\n  <\/td><td>\n  \u00edndice\n  (por referencia)\n  <\/td><td>\n  Asocia\n  el \u00edndice del \u00faltimo elemento al par\u00e1metro (devuelve cero si el array est\u00e1\n  vac\u00edo)\n  <\/td><\/tr><tr><td>\n  next()\n  <\/td><td>\n  \u00edndice\n  (por referencia)\n  \n  <\/td><td>\n  Asocia\n  el \u00edndice del siguiente elemento al par\u00e1metro (devuelve cero si el array est\u00e1\n  vac\u00edo)\n  <\/td><\/tr><tr><td>\n  prev()\n  <\/td><td>\n  \u00edndice\n  (por referencia)\n  \n  <\/td><td>\n  Asocia\n  el \u00edndice del anterior elemento al par\u00e1metro (devuelve cero si el array est\u00e1\n  vac\u00edo)\n  <\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Ejemplo de aplicaci\u00f3n<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Queremos hacer un detector de tipos de paquetes ethernet y que almacene ordenadamente en un array las ocurrencias de cada tipo. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dado que el tipo ethernet tiene 16 bits necesitar\u00edamos un array de 65536 posiciones ; pero normalmente en una red local no aparecen tantos tipos distintos ni much\u00edsimo menos \u00d8<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Podr\u00edamos pensar en poner un array bidimensional de Nx2 enteros, siendo una columna para el tipo y otra para en cuantos paquetes se ha detectado ese tipo, pero necesitar\u00edamos adem\u00e1s funciones de b\u00fasqueda y ordenaci\u00f3n. Adem\u00e1s est\u00e1 el problema de qu\u00e9 pasa si se nos llena. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Soluci\u00f3n: usar un array asociativo. <\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: systemverilog; title: ; notranslate\" title=\"\">\nint tipos_paquete&#x5B;shortint]; \/\/ tipo de paquete es 16 bits\n\ntask almacena_tipo(shortint tipo)\nif (!tipos_paquete.exists&#x5B;tipo])\n  tipos_paquete&#x5B;tipo] = 1;\nelse\n  tipos_paquete&#x5B;tipo]++;\nendfunction\n. . .\n\/\/ Cada vez que llega un paquete llamamos a almacena_tipo\n. . .\n\/\/ Al final de la simulaci\u00f3n mostramos resultado\nshortint tipo;\nif (tipos_paquete.first(tipo)) begin \/\/ vemos si hay elementos\n  do\n    $display (&quot;Recibidos %d paquetes de tipo %d\\n&quot;,\n               tipos_paquete&#x5B;tipo], tipo);\n  while ( tipo_paquete.next(tipo));\nend\n\n<\/pre><\/div>","protected":false},"excerpt":{"rendered":"<p>Son \u201clook-up tables\u201d y equivaldr\u00edan a los hashes de Perl Su sintaxis es : data-type&nbsp; array-name&nbsp; [ index-data-type | * ] Siendo el index-data-type: Ejemplo1: Ejemplo2: M\u00e9todos predefinidos: Funci\u00f3n Par\u00e1metros Resultado num() &#8211; Devuelve n\u00famero de elementos delete() \u00edndice (por valor) Borra elemento indicado exists() \u00edndice (por valor) Indica si el elemento existe first() \u00edndice (por referencia) Asocia el \u00edndice del primer elemento al par\u00e1metro (devuelve cero si el array est\u00e1 vac\u00edo) last() \u00edndice (por referencia) Asocia el \u00edndice del \u00faltimo elemento al par\u00e1metro (devuelve cero si el array est\u00e1 vac\u00edo) next() \u00edndice (por referencia) Asocia el \u00edndice del siguiente elemento al par\u00e1metro (devuelve cero si el array est\u00e1 vac\u00edo) prev() \u00edndice (por referencia) Asocia el \u00edndice del anterior elemento al par\u00e1metro (devuelve cero si el array est\u00e1 vac\u00edo) Ejemplo de aplicaci\u00f3n Queremos hacer un detector de tipos de paquetes ethernet y que almacene ordenadamente en un array las ocurrencias de cada tipo. Dado que el tipo ethernet tiene 16 bits necesitar\u00edamos un array de 65536 posiciones ; pero normalmente en una red local no aparecen tantos tipos distintos ni much\u00edsimo menos \u00d8 Podr\u00edamos pensar en poner un array bidimensional de Nx2 enteros, siendo una columna para el tipo y otra para en cuantos paquetes se ha detectado ese tipo, pero necesitar\u00edamos adem\u00e1s funciones de b\u00fasqueda y ordenaci\u00f3n. Adem\u00e1s est\u00e1 el problema de qu\u00e9 pasa si se nos llena. Soluci\u00f3n: usar un array asociativo.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":59,"menu_order":8,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","ub_ctt_via":"","footnotes":""},"class_list":["post-161","page","type-page","status-publish","hentry"],"featured_image_src":null,"_links":{"self":[{"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/pages\/161","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=161"}],"version-history":[{"count":5,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/pages\/161\/revisions"}],"predecessor-version":[{"id":1841,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/pages\/161\/revisions\/1841"}],"up":[{"embeddable":true,"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=\/wp\/v2\/pages\/59"}],"wp:attachment":[{"href":"https:\/\/dsd.webs.upv.es\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=161"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}