有没有更简洁的写作方式?
listOf('a'..'z','A'..'Z').flatMap { it }这里的想法是在一个范围内迭代一些值,比如从1到100之间的数字,跳过21到24。
listOf(1..20, 25..100).flatMap { it }发布于 2016-01-19 15:53:04
通过使用flatten()而不是flatMap(),可以将列表稍微缩短一些
listOf('a'..'z','A'..'Z').flatten()或者一个较短的表单(来自@Ilya)是使用 operator of Iterable (一个范围为实现的接口)。每个+都将复制列表:
val validLetters = ('a'..'z') + ('A'..'Z')
val someNumbers = (1..20) + (25..100)或者像Sequence那样变得更懒(在这里根本不确定是否更懒惰):
sequenceOf('a'..'z','A'..'Z').flatten()##As Helper Functions##
在Kotlin中,人们通常会创建一个帮助函数来很好地包装这样的东西;如果您经常重复使用这些代码:
// helper functions
fun sparseListOf(vararg ranges: CharRange): List<Char> = ranges.flatMap { it }
fun sparseListOf(vararg ranges: IntRange): List<Int> = ranges.flatMap { it }...and这些助手的用法:
val validLetters = sparseListOf('a'..'z', 'A'..'Z')
val someNumbers = spareListOf(1..20, 25..100)注意:帮助函数使用flatMap(),因为Array<out XYZ>没有flatten()方法或扩展,这是从vararg__接收的类型。lambda是内联的,所以性能上没有真正的差别。
发布于 2016-01-19 16:21:28
kotlin.Char.rangeTo返回一个CharRange,它是CharProgression的实现。CharProgression是Iterable的子类,加号运算符是在可迭代的:Iterable<T>.plus上定义的。
看上去很简单,很明显
('a'..'z') + ('A'..'Z')https://stackoverflow.com/questions/34881006
复制相似问题