{"id":158,"date":"2023-04-22T06:14:31","date_gmt":"2023-04-22T06:14:31","guid":{"rendered":"https:\/\/canessaalvamiguel.dev\/?p=158"},"modified":"2023-04-22T06:14:32","modified_gmt":"2023-04-22T06:14:32","slug":"collections-in-scala","status":"publish","type":"post","link":"https:\/\/canessaalvamiguel.dev\/index.php\/2023\/04\/22\/collections-in-scala\/","title":{"rendered":"Collections in Scala"},"content":{"rendered":"\n<p>En la programaci\u00f3n, las colecciones son estructuras de datos que contienen varios elementos. En Scala, las colecciones son representadas por las clases de la biblioteca est\u00e1ndar, que proporcionan una variedad de operaciones para trabajar con datos de colecci\u00f3n. En este art\u00edculo, exploraremos los diferentes tipos de colecciones en Scala y c\u00f3mo usarlos.<\/p>\n\n\n\n<p>Scala tiene tres tipos principales de colecciones:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Colecciones secuenciales<\/li>\n\n\n\n<li>Colecciones de conjuntos<\/li>\n\n\n\n<li>Colecciones de mapas<\/li>\n<\/ol>\n\n\n\n<p>Cada uno de estos tipos de colecciones tiene sus propias clases y m\u00e9todos. A continuaci\u00f3n, veremos algunos ejemplos de c\u00f3mo trabajar con cada uno de ellos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Colecciones secuenciales<\/h2>\n\n\n\n<p>Las colecciones secuenciales en Scala son aquellas que tienen un orden definido para sus elementos. Las dos clases principales de colecciones secuenciales son List y Vector.<\/p>\n\n\n\n<p>List es una colecci\u00f3n inmutable y es implementada como una estructura de datos enlazada. Cada elemento en la lista tiene un puntero al siguiente elemento en la lista. Aqu\u00ed hay un ejemplo de c\u00f3mo crear una lista en Scala:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: scala; title: ; notranslate\" title=\"\">\nval myList = List(1, 2, 3, 4, 5)\n<\/pre><\/div>\n\n\n<p>Vector, por otro lado, es una colecci\u00f3n mutable y es implementada como un arreglo de tama\u00f1o variable. Aqu\u00ed hay un ejemplo de c\u00f3mo crear un vector en Scala:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: scala; title: ; notranslate\" title=\"\">\nval myVector = Vector(1, 2, 3, 4, 5)\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">2. Colecciones de conjuntos<\/h2>\n\n\n\n<p>Las colecciones de conjuntos en Scala son aquellas que no tienen un orden definido para sus elementos y no permiten duplicados. Las dos clases principales de colecciones de conjuntos son Set y HashSet.<\/p>\n\n\n\n<p>Set es una colecci\u00f3n inmutable y es implementada como una tabla hash. Aqu\u00ed hay un ejemplo de c\u00f3mo crear un conjunto en Scala:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: scala; title: ; notranslate\" title=\"\">\nval mySet = Set(1, 2, 3, 4, 5)\n<\/pre><\/div>\n\n\n<p>HashSet, por otro lado, es una colecci\u00f3n mutable y es implementada como una tabla hash tambi\u00e9n. Aqu\u00ed hay un ejemplo de c\u00f3mo crear un HashSet en Scala:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nval myHashSet = HashSet(1, 2, 3, 4, 5)\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">3. Colecciones de mapas<\/h2>\n\n\n\n<p>Las colecciones de mapas en Scala son aquellas que almacenan elementos en pares clave-valor. Las dos clases principales de colecciones de mapas son Map y HashMap.<\/p>\n\n\n\n<p>Map es una colecci\u00f3n inmutable y es implementada como una tabla hash. Aqu\u00ed hay un ejemplo de c\u00f3mo crear un mapa en Scala:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: scala; title: ; notranslate\" title=\"\">\nval myMap = Map(&quot;key1&quot; -&gt; &quot;value1&quot;, &quot;key2&quot; -&gt; &quot;value2&quot;, &quot;key3&quot; -&gt; &quot;value3&quot;)\n<\/pre><\/div>\n\n\n<p>HashMap, por otro lado, es una colecci\u00f3n mutable y es implementada como una tabla hash tambi\u00e9n. Aqu\u00ed hay un ejemplo de c\u00f3mo crear un HashMap en Scala:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nval myHashMap = HashMap(&quot;key1&quot; -&gt; &quot;value1&quot;, &quot;key2&quot; -&gt; &quot;value2&quot;, &quot;key3&quot; -&gt; &quot;value3&quot;)\n<\/pre><\/div>\n\n\n<p>Adem\u00e1s de estas colecciones, Scala tambi\u00e9n proporciona colecciones especiales como <code>Tuple<\/code>, <code>Range<\/code>, <code>Stream <\/code>y <code>ArrayBuffer<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conceptos importantes<\/h2>\n\n\n\n<p><strong>Transformaciones en colecciones:<\/strong> Las colecciones en Scala son inmutables por defecto, lo que significa que una vez creadas, no se pueden modificar. En su lugar, se deben crear nuevas colecciones a trav\u00e9s de transformaciones, que aplican una funci\u00f3n a cada elemento de la colecci\u00f3n y producen una nueva colecci\u00f3n. Algunas transformaciones comunes son map, filter y flatMap.<\/p>\n\n\n\n<p><strong>Operaciones de reducci\u00f3n:<\/strong> Las operaciones de reducci\u00f3n se utilizan para reducir una colecci\u00f3n a un solo valor. Algunas operaciones de reducci\u00f3n comunes son foldLeft, foldRight, reduceLeft y reduceRight. Estas operaciones toman una funci\u00f3n binaria que se utiliza para combinar elementos de la colecci\u00f3n en un solo valor.<\/p>\n\n\n\n<p><strong>Agrupamiento:<\/strong> Las colecciones se pueden agrupar en mapas utilizando el m\u00e9todo groupBy. Este m\u00e9todo toma una funci\u00f3n que se utiliza para determinar la clave de cada elemento y devuelve un mapa cuyas claves son los valores devueltos por la funci\u00f3n y cuyos valores son las listas de elementos que tienen esa clave.<\/p>\n\n\n\n<p><strong>Ordenaci\u00f3n:<\/strong> Las colecciones se pueden ordenar mediante el m\u00e9todo sorted. Este m\u00e9todo devuelve una nueva colecci\u00f3n ordenada seg\u00fan un criterio espec\u00edfico. Tambi\u00e9n se pueden utilizar los m\u00e9todos sortBy y sortWith para ordenar colecciones seg\u00fan otros criterios.<\/p>\n\n\n\n<p><strong>Iteraci\u00f3n:<\/strong> Las colecciones se pueden iterar utilizando los m\u00e9todos foreach y for. El m\u00e9todo foreach toma una funci\u00f3n que se aplica a cada elemento de la colecci\u00f3n, mientras que la estructura for se puede utilizar para iterar sobre una colecci\u00f3n de forma similar a un bucle for en otros lenguajes.<\/p>\n\n\n\n<p>Aqu\u00ed hay un ejemplo que combina varios de estos conceptos:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: scala; title: ; notranslate\" title=\"\">\nval numbers = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)\n\n\/\/ Transformaciones\nval squares = numbers.map(n =&gt; n * n)\nval evens = numbers.filter(n =&gt; n % 2 == 0)\nval flatMapExample = numbers.flatMap(n =&gt; List(n, n * n))\n\n\/\/ Operaciones de reducci\u00f3n\nval sum = numbers.foldLeft(0)(_ + _)\nval product = numbers.foldLeft(1)(_ * _)\nval max = numbers.reduceLeft((a, b) =&gt; if (a &gt; b) a else b)\n\n\/\/ Agrupamiento\nval words = List(&quot;apple&quot;, &quot;banana&quot;, &quot;cherry&quot;, &quot;date&quot;, &quot;elderberry&quot;)\nval byFirstLetter = words.groupBy(_.charAt(0))\n\n\/\/ Ordenaci\u00f3n\nval descending = numbers.sorted.reverse\nval byStringLength = words.sortBy(_.length)\nval byLastLetter = words.sortWith((a, b) =&gt; a.last &gt; b.last)\n\n\/\/ Iteraci\u00f3n\nnumbers.foreach(n =&gt; println(n))\nfor (n &lt;- numbers) {\n  println(n)\n}\n<\/pre><\/div>\n\n\n<p>En este ejemplo, se crea una lista de n\u00fameros y se utilizan transformaciones como <code>map<\/code>, <code>filter <\/code>y <code>flatMap <\/code>para crear nuevas colecciones a partir de ella. Luego, se utilizan operaciones de reducci\u00f3n como <code>foldLeft <\/code>y <code>reduceLeft <\/code>para calcular valores agregados a partir de la lista original. Tambi\u00e9n se utiliza el m\u00e9todo <code>groupBy <\/code>para agrupar una lista de palabras en un mapa, y los m\u00e9todos <code>sorted<\/code>, <code>sortBy <\/code>y <code>sortWith <\/code>para ordenar las colecciones de diversas maneras. Finalmente, se utilizan los m\u00e9todos <code>foreach <\/code>y <code>for<\/code> para iterar sobre las colecciones.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En la programaci\u00f3n, las colecciones son estructuras de datos que contienen varios elementos. En Scala, las colecciones son<\/p>\n","protected":false},"author":1,"featured_media":62,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[35,8],"class_list":["post-158","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scala","tag-collections","tag-scala"],"_links":{"self":[{"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/posts\/158","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/comments?post=158"}],"version-history":[{"count":1,"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/posts\/158\/revisions"}],"predecessor-version":[{"id":159,"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/posts\/158\/revisions\/159"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/media\/62"}],"wp:attachment":[{"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/media?parent=158"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/categories?post=158"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/tags?post=158"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}