list dispersa de valores que usan ranges

hay una forma más escueta de escribir

listOf('a'..'z','A'..'Z').flatMap { it } 

La idea aquí es iterar sobre algunos valores en un range, como los numbers del 1 al 100, omitiendo del 21 al 24

 listOf(1..20, 25..100).flatMap { it } 

Puede ir un poco más corto para una list usando flatten() lugar de flatMap() :

 listOf('a'..'z','A'..'Z').flatten() 

o una forma más corta (de @Ilya) es usar el operador plus() + de Iterable ( una interfaz que se extiende implementar ). Cada + hará una copy de la list:

 val validLetters = ('a'..'z') + ('A'..'Z') val someNumbers = (1..20) + (25..100) 

o va más perezoso como una Sequence (no estoy seguro de que aquí sea más importante ser más flojo):

 sequenceOf('a'..'z','A'..'Z').flatten() 

Como funciones auxiliares

En Kotlin, la gente suele crear una function de ayuda para envolver cosas como esta muy bien; si reutilizas mucho este código:

 // helper functions fun sparseListOf(vararg ranges: CharRange): List<Char> = ranges.flatMap { it } fun sparseListOf(vararg ranges: IntRange): List<Int> = ranges.flatMap { it } 

… y el uso de esos ayudantes:

 val validLetters = sparseListOf('a'..'z', 'A'..'Z') val someNumbers = spareListOf(1..20, 25..100) 

NOTA: las funciones auxiliares usan flatMap() ya que no hay un método o extensión flatten() para Array<out XYZ> que es el tipo recibido de la vararg . La lambda está en línea, por lo que es probable que no haya una diferencia real en el performance.

El kotlin.Char.rangeTo devuelve un CharRange que es una implementación de CharProgression . CharProgression es una subclass de Iterable y el operador plus se define en iterables: Iterable<T>.plus

Yeilding un aspecto muy simple y obvio

 ('a'..'z') + ('A'..'Z') 
  • ¿Cuál es la anotación @InlineOnly?
  • Referencia no resuelta de Android Studio 3.0: Idiomas admitidos para la class AIConfiguration en Dialogflow (api.ai)
  • El file de class Java convertido a kotlin produce un error de compilation
  • ¿Cómo implementar finalize () en kotlin?
  • Formulario de inicio de session con request de repetición en rxJava y Retrofit
  • Firebase no obtiene datos del método onDataChange
  • agregar fragment en la actividad del fragment no funciona en Pixel XL versión de Android 8.0.0
  • Cómo comstackr el código de testing de unidad de Kotlin que usa hamcrest 'is'
  • Hibernate calcula la colección @Formula
  • ¿Cómo crear proxy dynamic / transparente en Kotlin?
  • Cambiar la capacidad de anulación del parámetro de la function anulada en kotlin