Kotlin 使用范围的稀疏值列表

Kotlin 使用范围的稀疏值列表,kotlin,Kotlin,有没有更简洁的写作方法 listOf('a'..'z','A'..'Z').flatMap { it } 这里的想法是迭代范围内的一些值,比如从1到100的数字,跳过21到24 listOf(1..20, 25..100).flatMap { it } 您可以通过使用而不是使用以下命令来稍微缩短列表: 或者更简短的形式(来自@Ilya)是使用of(一个范围实现的接口)。每个+都将制作列表的副本: val validLetters = ('a'..'z') + ('A'..'Z') val s

有没有更简洁的写作方法

listOf('a'..'z','A'..'Z').flatMap { it }
这里的想法是迭代范围内的一些值,比如从1到100的数字,跳过21到24

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

您可以通过使用而不是使用以下命令来稍微缩短列表:

或者更简短的形式(来自@Ilya)是使用of(一个范围实现的接口)。每个
+
都将制作列表的副本:

val validLetters = ('a'..'z') + ('A'..'Z')
val someNumbers = (1..20) + (25..100)
或者按照
顺序变得更懒(不确定更懒是否重要):

作为辅助函数 在Kotlin中,人们通常创建一个helper函数来很好地包装这样的东西;如果您经常重复使用此代码:

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

注意:辅助函数使用
flatMap()
,因为从
vararg
接收的类型为
Array
,没有
flatte()
方法或扩展。lambda是内联的,因此在性能上可能没有真正的差异

kotlin.Char.rangeTo
返回一个
CharRange
,它是
CharProgression
的一个实现。CharProgression是
Iterable
的一个子类,加号运算符是在iterables上定义的:
Iterable.plus

Yeilding外观非常简单且明显

('a'..'z') + ('A'..'Z')

对于即时评估,还有一个更短的选项:
('a'..'z')+('a'..'z')
在编辑中添加了该选项。如果你手头上正好有范围,比如文字范围,就可以了。如果你手头上有文字范围,就可以了。
plus()
操作员将为每个附加的
+
创建副本@伊利亚已经在上面添加了这一评论。
// helper functions
fun sparseListOf(vararg ranges: CharRange): List<Char> = ranges.flatMap { it }       
fun sparseListOf(vararg ranges: IntRange): List<Int> = ranges.flatMap { it }
val validLetters = sparseListOf('a'..'z', 'A'..'Z')
val someNumbers = spareListOf(1..20, 25..100)
('a'..'z') + ('A'..'Z')