Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

308
Views
¿Cómo combinar dos listas de diferentes longitudes en kotlin?

Quiero combinar dos listas de diferentes longitudes. Por ejemplo;

 val list1 = listOf(1,2,3,4,5) val list2 = listOf("a","b","c")

quiero salir asi

 (1,"a",2,"b",3,"c",4,5)

¿Hay alguna sugerencia?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Puede usar la función .zip para eso

 list1.zip(list2){ a,b -> listOf(a,b)}.flatten()

El único problema es que solo procesará elementos, con ambos conjuntos, por lo que si (como en el ejemplo) tenemos un tamaño diferente, no funcionará

La alternativa podría ser agregar marcadores específicos y filtrarlos o simplemente usar iteradores para eso. Encontré una solución elegante con la función de sequence{..}

 val result = sequence { val first = list1.iterator() val second = list2.iterator() while (first.hasNext() && second.hasNext()) { yield(first.next()) yield(second.next()) } yieldAll(first) yieldAll(second) }.toList()
over 4 years ago · Santiago Trujillo Report

0

  1. Si los elementos de las listas de origen pueden aparecer en cualquier orden en la lista resultante, entonces
 >>> list1 + list2 res12: kotlin.collections.List<kotlin.Any> = [1, 2, 3, 4, 5, a, b, c]
  1. Si los elementos de las listas de origen deben alternarse en la lista resultante y la lista1 es más larga que la lista2, entonces
 >>> list1.zip(list2).flatMap { listOf(it.first, it.second) } + list1.drop(list2.size) res16: kotlin.collections.List<kotlin.Any> = [1, a, 2, b, 3, c, 4, 5]
over 4 years ago · Santiago Trujillo Report

0

Podrías hacerlo así:

 val mergedList = with(setOf(list1, list2).sortedByDescending { it.count() }) { first().mapIndexed { index, e -> listOfNotNull(e, last().getOrNull(index)) } }.flatten()

Primero, coloca ambas listas en un Set , luego las ordena (descendentemente) por el número de elementos que producen una lista de listas.

La primera lista que tiene la mayoría de los elementos se utilizará para la iteración.

Usando mapIndexed puede usar el index para acceder al elemento correspondiente en la segunda lista. Si no hay ninguno, se devuelve null y listOfNotNull lo filtrará. Al final, aplanas la lista de listas resultante y obtienes el resultado deseado:

[1, a, 2, b, 3, c, 4, 5]

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!